Python:嵌套循环

时间:2009-11-30 18:20:42

标签: python loops nested

考虑一下:

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

>>> for i in a:
...     for x in i:
...         print x
... 
one
two
bad
good

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

for i in a:
    print [x for x in i]

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

['one', 'two']
['bad', 'good']

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

8 个答案:

答案 0 :(得分:7)

列表推导和生成器仅设计用作表达式,而打印是一种语句。虽然你可以通过

来实现你想要做的事情
from __future__ import print_function
for x in a:
    [print(each) for each in x]
这样做非常简单,并且会产生一个你实际上并不需要的列表。您可以做的最好的事情就是在原始示例中编写嵌套的for循环。

答案 1 :(得分:7)

根据你的例子,你可以这样做:

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

for x in sum(map(list, a), []):
    print x

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

更好的方法是Tim Pietzcker建议:

from itertools import chain

for x in chain(*a):
    print x

使用star notation*a,您可以在列表中添加n个元组。

答案 2 :(得分:4)

>>> a = [("one","two"), ("bad","good")]
>>> print "\n".join(j for i in a for j in i)
one
two
bad
good



>>> for i in a:
...  print "\n".join(i)
... 
one
two
bad
good

答案 3 :(得分:3)

import itertools
for item in itertools.chain(("one","two"), ("bad","good")):
    print item
只需一个for循环,

就会产生所需的输出。

答案 4 :(得分:3)

打印功能确实非常出色,但这是一个更加抒情的建议,灵感来自Benjamin Pollack的回答:

from __future__ import print_function
for x in a:
    print(*x, sep="\n")

只需使用*将列表x解压缩为函数的参数,并使用换行符分隔符。

答案 5 :(得分:1)

您需要定义自己的打印方法(或导入__future__.print_function

def pp(x): print x

for i in a:
  _ = [pp(x) for x in i]

注意_用于表示要忽略返回的列表。

答案 6 :(得分:1)

此代码比其他解决方案更简单,更简单:

for i in a:
    print '\n'.join([x for x in i])

答案 7 :(得分:0)

不是最好的,但是:

for i in a:
    some_function([x for x in i])

def some_function(args):
    for o in args:
        print o