[英]Printing a string prints 'u' before the string in Python?
'u'在打印列表中的元素之前? 我没有在我的代码中输入你。
hobbies = []
#prompt user three times for hobbies
for i in range(3):
hobby = raw_input('Enter a hobby:')
hobbies.append(hobby)
#print list stored in hobbies
print hobbies
当我运行它时,它打印列表但它的格式如下:
Enter a hobby: Painting
Enter a hobby: Stargazing
Enter a hobby: Reading
[u'Painting', u'Stargazing', u'Reading']
None
那些'你'在列表的每个元素之前来自哪里?
我认为你真正感到惊讶的是,打印单个字符串与打印字符串列表的方式不同 - 无论它们是否为Unicode都是如此:
>>> hobby1 = u'Dizziness'
>>> hobby2 = u'Vértigo'
>>> hobbies = [hobby1, hobby2]
>>> print hobby1
Dizziness
>>> print hobbies
[u'Dizziness', u'V\xe9rtigo']
即使没有u
,你也有这些额外的引用,更不用说反斜杠了。 如果你用str
字节字符串而不是unicode
字符串尝试相同的东西,你仍然会有引号和转义(如果你的源文件和终端有不同的编码,你可能会有mojibake字符......但是忘记那部分)。
在Python中,每个对象都可以有两种不同的表示形式:最终用户友好的表示形式, str
和程序员友好的表示形式, repr
。 对于字节字符串,这些表示分别是Painting
和'Painting'
。 对于Unicode字符串,它们是Painting
和u'Painting'
。
print
语句使用str
,因此print hobby1
打印出Painting
,没有引号(或u
,如果它是Unicode)。
但是,列表的str
使用每个元素的repr
,而不是str
。 因此,当你打印hobbies
,每个元素都有引号(如果它是Unicode,则为u
)。
这一开始可能看起来很奇怪,但这是一个有意的设计决定,一旦你习惯它就有意义了。 打印出[foo, bar, baz]
是不明确的 - 是三个字符串的列表,还是两个字符串的列表,其中一个字符串中间有一个逗号? 但是,更重要的是,无论你如何打印它,列表已经不是一个用户友好的东西。 My hobbies are [Painting, Stargazing]
观星My hobbies are [Painting, Stargazing]
看起来和My hobbies are ['Painting', 'Stargazing']
一样丑陋My hobbies are ['Painting', 'Stargazing']
。 当您想要向最终用户显示列表时,您总是希望以某种有意义的方式显式地对其进行格式化。
通常,你想要的就像这样简单:
>>> print 'Hobbies:', ', '.join(hobbies)
Hobbies: Painting, Stargazing
或者,对于Unicode字符串:
>>> print u'Hobbies:', u', '.join(hobbies)
Hobbies: Painting, Stargazing
'u'不是字符串的一部分,但表示字符串是unicode字符串。
您不打印字符串,而是打印包含字符串的列表的表示。
for hobby in hobbies:
print hobby
如果要将unicode转换为字符串。 您可以简单地使用str(unicodedString)或unicode(normalString)进行其他方式转换
码
hobbies = []
#prompt user three times for hobbies
for i in range(3):
hobby = raw_input('Enter a hobby:')
# converting the normal string to unicode
hobbies.append(unicode(hobby))
# Printing the unicoded string
print("Unicoded string")
print(hobbies)
hobbies = [str(items) for items in hobbies]
# Printing the converted string
print("Normal string from unicoded string")
print(hobbies)
产量
Enter a hobby:test1
Enter a hobby:Test2
Enter a hobby:Test3
Unicoded string
[u'test1', u'Test2', u'Test3']
Normal string from unicoded string
['test1', 'Test2', 'Test3']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.