假设我有3个这样的列表
l1 = [1,2,3]
l2 = [4,5,6]
l3 = [7,8,9]
如何同时打印出这些列表中的所有内容? 做类似事情的pythonic方法是什么?
for f in l1,l2 and l3:
print f
这似乎只考虑了2个列表。
所需的输出:对于所有列表中的每个元素,我使用不同的函数将它们打印出来
def print_row(filename, status, Binary_Type):
print " %-45s %-15s %25s " % (filename, status, Binary_Type)
我在for循环中调用上面的函数。
答案 0 :(得分:11)
我想你可能想要zip
:
for x,y,z in zip(l1,l2,l3):
print x,y,z #1 4 7
#2 5 8
#3 6 9
你在做什么:
for f in l1,l2 and l3:
有点奇怪。它基本等同于for f in (l1,l3):
,因为l2 and l3
返回l3
(假设l2
和l3
都是非空的 - 否则,它将返回空一个。)
如果您只想连续打印每个列表,可以执行以下操作:
for lst in (l1,l2,l3): #parenthesis unnecessary, but I like them...
print lst #[ 1, 2, 3 ]
#[ 4, 5, 6 ]
#[ 7, 8, 9 ]
答案 1 :(得分:3)
无需使用zip
,只需使用+
运算符将它们添加到一起即可。 l1 + l2 + l3
创建了一个新列表,该列表是l1
,l2
和l3
的组合,因此您可以简单地遍历它,如下所示:
for f in l1+l2+l3:
print(f)
您对and
运算符的使用不正确。你的代码不起作用的另一个原因是使用逗号(如l1, l2, l3
)创建一个元组,这是一个现在容纳你的3个列表的容器。因此,当您尝试遍历l1, l2, l3
时,它将循环遍历该元组中的每个元素(这些是列表),而不是通过列表中的每个元素循环。
答案 2 :(得分:2)
如果要打印
1 4 7
2 5 8
3 6 9
执行:
for i,j,k in zip(l1,l2,l3):
print i,j,k
答案 3 :(得分:2)
这取决于你想要达到的目标,
>>> #Given
>>> l1,l2,l3 = [1,2,3],[4,5,6],[7,8,9]
>>> #To print row wise
>>> import itertools
>>> for f in itertools.chain(l1,l2,l3):
print(f,end=" ")
1 2 3 4 5 6 7 8 9
>>> #To print column wise
>>> for f in itertools.izip(l1,l2,l3):
print(*f,end=" ")
1 4 7 2 5 8 3 6 9
>>>
或以下将在Python 2.7中使用的实现
>>> for f in itertools.chain(*itertools.izip(l1,l2,l3)):
print f,
1 4 7 2 5 8 3 6 9
>>>
答案 4 :(得分:1)
你列表的长度不一样,使用map
通常更好:
>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> l3 = [7, 8, 9, 2]
>>> for x, y, z in map( None, l1, l2, l3):
... print x, y, z
...
1 4 7
2 5 8
3 6 9
None None 2
答案 5 :(得分:1)
要扩展Abhijit的答案,你可以使用itertools生成器作为列表理解中的iterable。
>>> [ n for n in itertools.chain(l1, l2, l3) ]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
答案 6 :(得分:0)
如果你的意思是你有3个相等长度的列表,并且你想将它们的内容打印成3列,那么在每次迭代时如何将zip()连接到列和列表理解为print():
keytool
以上将打印元组的repr。如果您想格式化值,则:
[ print(row) for row in zip(l1, l2, l3) ]
没有人说你必须使用列表理解的输出。