Python:嵌套循环

mRt*_*mRt 2 python loops nested

考虑一下:

>>> a = [("one","two"), ("bad","good")]

>>> for i in a:
...     for x in i:
...         print x
... 
one
two
bad
good
Run Code Online (Sandbox Code Playgroud)

如何编写此代码,但使用如下语法:

for i in a:
    print [x for x in i]
Run Code Online (Sandbox Code Playgroud)

显然,这不起作用,它打印:

['one', 'two']
['bad', 'good']
Run Code Online (Sandbox Code Playgroud)

我想要相同的输出.可以吗?

Ben*_*ack 7

列表推导和生成器仅设计用作表达式,而打印是一种语句.虽然你可以通过这样做来影响你想要做的事情

from __future__ import print_function
for x in a:
    [print(each) for each in x]
Run Code Online (Sandbox Code Playgroud)

这样做是令人惊讶的unpythonic,并导致生成一个你实际上不需要的列表.您可以做的最好的事情就是for在原始示例中编写嵌套循环.


tgr*_*ray 7

举个例子,你可以这样做:

a = [("one","two"), ("bad","good")]

for x in sum(map(list, a), []):
    print x
Run Code Online (Sandbox Code Playgroud)

但是,一旦列表变大,这可能变得非常缓慢.

更好的方法就像Tim Pietzcker建议的那样:

from itertools import chain

for x in chain(*a):
    print x
Run Code Online (Sandbox Code Playgroud)

使用星号表示法,*a允许您在列表中包含n个元组.