4

I have a list compiled from excel cells, using python - say listlist. Each element in the cell/list is in unicode. When I print the list as

print listlist

I see 'u' prepended to each member of the list. But when I print the list like

for member in listlist:
  print member

I do not see the 'u' prepended to the member.

Can someone please explain to me why there is this difference? Is it defined in the xlrd module?

4 Answers 4

7

This is because print list is equivalent to

print "[", ", ".join(repr(i) for i in list), "]"

repr(s) is u"blabla" for a unicode string while print s prints only blabla.

Sign up to request clarification or add additional context in comments.

Comments

4

When printing the list, it shows each object within the list using the object's __repr__

When printing the object alone, it uses the object's __str__

Comments

3

There are two ways to turn a Python value into a string str and repr (and their equivalent class methods __str__ and __repr__). The difference comes from these two functions. From the Python tutorial:

The str() function is meant to return representations of values which are fairly human-readable, while repr() is meant to generate representations which can be read by the interpreter (or will force a SyntaxError if there is not equivalent syntax).

The print statement calls str on the object you pass in, but the list's __str__ method calls repr on it's values. The values of your list are unicode strings. In human readable form the fact it's unicode is irrelevent, so you don't get a u, or even quote marks. In computer readable form it is important, so the u is included.

Comments

1

when you are printing a list, python prints a representation of the list.

the default representation of a list is to print an opening square brackets ([), then the representation of each element separated by a comma (,), the a closing square bracket (]). (to be precise the representation of an object is what is returned when calling its __repr__() member). note that the default representation of a unicode string is u'...'.

now, when you are printing a string, you are not printing the representation of the string, you are printing the string (the value returned by calling the __str__() member). and the string does not include formatting charaters like unicode flags, quotes, etc...

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.