Please observe the following behavior:
a = u\"foo\"
b = u\"b\\xe1r\" # \\xe1 is an \'a\' with an accent
s = [a, b]
print a, b
print s
for x in s: print x,
You get this because lists can contain any number of elements, of mixed types. In the second case, instead of printing unicode strings, you're printing the list itself - which is very different than printing the list contents.
Since the list can contain anything, you get the u'foo'
syntax. If you were using non-unicode strings, you'd see the 'foo'
instead of just foo
, as well.
When you print a list, you get the repr()
of each element, lists aren't really meant to be printed, so python tries to print something representative of it's structure.
If you want to format it in any particular way, either be explicit about how you want it formatted, or override it's __repr__
method.
Objects in Python have two ways to be turned into strings: roughly speaking, str() produces human readable output, and repr() produces computer-readable output. When you print something, it uses str().
But the str() of a list uses the repr() of its elements.