我正在尝试处理Python 2.7中包含非ASCII字符的字符串。 具体来说,我想打印以下列表的元素,以显示其外部表示:
foo = "mädchen wörter mutter".split()
像这样:
>>> for x in foo:
... print x
...
mädchen
wörter
mutter
除了我需要以功能方式进行。但是,如果我在不使用print
的情况下尝试以下操作,则会显示内部表示:
>>> [x for x in foo]
['m\xc3\xa4dchen', 'w\xc3\xb6rter', 'mutter']
我尝试使用这样的print
,但它显然不起作用,因为这会打印整个列表而不是每个单独的元素:
>>> print [x for x in foo]
['m\xc3\xa4dchen', 'w\xc3\xb6rter', 'mutter']
将print
放在方括号内会返回语法错误:
>>> [print x for x in foo]
File "<stdin>", line 1
[print x for x in foo]
^
SyntaxError: invalid syntax
然后我尝试使用可以打印x
的函数:
>>> def show(x):
... print(x)
...
>>> [show(x) for x in foo]
mädchen
wörter
mutter
[None, None, None]
除了最后的[None, None, None]
之外,它几乎可以工作(它来自哪里?)。
是否有一种功能性的方式来输出这样的东西:
>>> [*do_something* for x in foo]
mädchen
wörter
mutter
感谢您的帮助!
答案 0 :(得分:0)
def show(x):
print(x)
[show(x) for x in foo]
mädchen
wörter
mutter
[None, None, None]
如果你在脚本中写它,实际上会起作用。当您在解释器中编写它时,每次调用该函数时,都会打印值,最后也会打印列表。如果在.py文件中编写相同的代码,则不会打印列表。
答案 1 :(得分:0)
如何使用string.join(..)
?
print "\n".join(foo)
另请注意,您使用的内容称为:list comprehension
。通常,列表推导在map
的意义上使用 - 没有副作用。在每个元素上调用show(..)
并丢弃列表理解的结果并不是假设的使用方式。
除了最后的[无,无,无]之外,它几乎可以工作(这是从哪里来的?)。
它来自list-comprehension的返回值。每个元素show(..)
已应用,因为函数返回None
,您会看到3 None
s。