当前位置: 首页 > 面试题库 >

在Python中打印字符串会在字符串之前打印'u'吗?

蒋原
2023-03-14
问题内容

打印列表中元素之前的“ u”?我没有在代码中键入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

那些“ u”来自列表中每个元素的位置?


问题答案:

我认为您实际上对此感到惊讶的是,打印单个字符串与打印字符串列表的功能不同–无论是否为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字符串,它们是Paintingu'Painting'

print语句使用str,因此print hobby1打印出Painting,不带引号(u如果为Unicode,则为)。

但是,str列表的使用其repr每个元素的,而不使用str。因此,当您打印时hobbies,每个元素都带有引号(u如果是Unicode,则带有引号)。

乍一看这很奇怪,但这是一个故意的设计决定,一旦习惯了,这是有道理的。并且打印出来将是不明确的[foo, bar, baz]-是三个字符串的列表还是两个字符串的列表,其中一个在中间有逗号?但是,更重要的是,无论您如何打印,列表 已经 不是用户友好的事情。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


 类似资料:
  • 问题内容: 这肯定是一件容易的事,但这确实困扰着我。 我有一个脚本,可以读取网页并使用Beautiful Soup对其 进行解析。我从 汤中 提取所有链接,因为我的最终目标是打印出link.contents。 我要解析的所有文本都是ASCII。我知道Python将字符串视为unicode,并且我确信这非常方便,在我的wee脚本中没有用。 每次我去打印一个包含’String’的变量时,我都会被打印到

  • 问题内容: 我正在编写一个程序,该程序将以字符串形式输出唯一字符(通过扫描仪输入)。我创建了一个方法来尝试实现此目的,但我一直在获取不重复的字符,而不是字符串中唯一的一个(或多个)字符。我只想要唯一的字母。 这是我的代码: 这是上面代码的示例输出: 预期的输出将是: 问题答案: 根据所需的输出,当以后重复时,必须替换最初已经添加的字符,因此:

  • 问题内容: 我曾尝试打印它,但由于它是转义字符,因此只是通过而已。例如,输出应如下。 提前致谢 问题答案: 为此以及将来的参考:

  • #include <stdio.h> #include <wchar.h> int main(void) { char str1[] = "abcd"; wchar_t str2[] = L"abcd"; return 0; } 技巧 用gdb调试程序时,可以使用“x/s”命令打印ASCII字符串。以上面程序为例: Temporary brea

  • 我想打印一个字符串作为valuei尝试遵循宏[2]和“set”[1]选项,但仍然没有运气; [1] 我怎样才能使我的速度测试版打印像;?

  • 我被一些有趣的任务困住了。我有3个字符串(hello,heavy&word)。需要计算每一个世界的总和并打印最大的世界和总和。用于计算-a=1,z=26。所以hello=50,heavy=61&word=60。最大的字符串是“Heavy”,我需要像“Heavy,61”那样打印出来。我找到了从一个字符串计算字符的代码: