如何在功能样式中打印非ASCII字符的列表元素?

时间:2016-05-20 16:22:22

标签: python python-2.7 utf-8 non-ascii-characters python-unicode

我正在尝试处理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

感谢您的帮助!

2 个答案:

答案 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。