Python:嵌套循环
考虑一下这个:
>>> 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
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。