同时打印多个列表中的所有值

时间:2012-08-20 15:52:18

标签: python list

假设我有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循环中调用上面的函数。

7 个答案:

答案 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(假设l2l3都是非空的 - 否则,它将返回空一个。)

如果您只想连续打印每个列表,可以执行以下操作:

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创建了一个新列表,该列表是l1l2l3的组合,因此您可以简单地遍历它,如下所示:

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) ]

没有人说你必须使用列表理解的输出。