如何以功能样式打印具有非 ASCII 字符的列表元素?

How to print list elements with non-ASCII characters in functional style?

我试图在 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放在方括号returns内出现语法错误:

>>> [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

感谢您的帮助!

def show(x):
    print(x)

[show(x) for x in foo]
mädchen
wörter
mutter
[None, None, None]

如果您将它写在脚本中,它就会真正起作用。当你在解释器中编写它时,每次调用该函数时,都会打印值,最后也会打印列表。如果您在 .py 文件中编写相同的代码,则不会打印列表。

使用 string.join(..) 怎么样?

print "\n".join(foo)

另外,请注意您使用的是:list comprehension。通常,列表理解在 map 的意义上使用——没有副作用。在每个元素上调用 show(..),并丢弃列表理解的结果并不是 应该 的使用方式..


This almost works, except for the [None, None, None] at the end (where does that comes from?).

来自list-comprehension的return值。它是 show(..) applied 每个元素,并且由于函数 return None 你看到 3 Nones.