Efficiently creating a list of formatted hex values
The shortest and most readable way to do it would probably be

hexlist = [hex(x) for x in range(256)]




Time

Your first : 0.1  ms per loop for \$10^5\$ loops

Your second: 1    ms per loop for \$10^5\$ loops

The above  : 0.02 ms per loop for \$10^5\$ loops



I'm unable to com up with a worse example, but there is always a worse way to do it, exactly as there is always preferable way to do it. 

Edit
To do this with filled zeros I would suggest to treat the first 10 numbers as a special case.

hexlist = [hex(x) if x &gt; 15 else "{:#04x}".format(x) for x in range(256)]


new time: 0.04 ms. Even if it isn't as pretty. 



Edit:

And when considering that format can format binary numbers, why not hex?

hexlist = ["{:#04x}".format(x) for x in range(256)]


I guess that this is hard coded for this range, but anyway. 

Time: 0.1ms for per loop for \$10^5\$ loops.



And more edits

Using old style:.

hexlist = ["0x%02x" % n for n in range(256)]


Time: 0.08ms per loop for \$10^5\$ loops. 



And specifically generating what we want.

hexlist = ["{:#04x}".format(x) for x in range(16)] + \
              [hex(x) for x in range(16, 256)]


Time: 0.03ms per loop for \$10^5\$ loops.