考虑一下:
>>> 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']
我想要相同的输出。可以吗?
答案 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