Python:嵌套循环

2 投票
8 回答
12441 浏览
提问于 2025-04-15 16:32

考虑一下这个:

>>> 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 个回答

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

使用星号表示法*a,可以让你的列表中有多个元组。

7

列表推导式和生成器主要是用来作为表达式的,而打印是一个语句。虽然你可以通过这样做来实现你想要的效果:

from __future__ import print_function
for x in a:
    [print(each) for each in x]

但这样做其实很不符合Python的风格,而且会生成一个你根本不需要的列表。最好的做法就是直接在你原来的例子中写嵌套的for循环。

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答