10

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

4

7 回答 7

15

我想你可能想要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 ]
于 2012-08-20T15:54:50.440 回答
4

无需使用zip,只需使用运算符将​​它们相加即可+l1 + l2 + l3创建一个由 , 组合而成的新列表,l1因此l2l3可以简单地循环遍历它,如下所示:

for f in l1+l2+l3:
    print(f)

您对and运算符的使用不正确。您的代码不起作用的另一个原因是使用逗号(如l1, l2, l3)创建一个元组,它是一个现在包含 3 个列表的容器。因此,当您尝试遍历l1, l2, l3它时,它将遍历该元组中的每个元素(即列表),而不是您想要的遍历列表中的每个元素。

于 2012-08-20T15:55:50.073 回答
2

如果你想打印

1 4 7
2 5 8
3 6 9

做:

for i,j,k in zip(l1,l2,l3):
    print i,j,k
于 2012-08-20T15:56:00.947 回答
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 
>>> 
于 2012-08-20T16:09:00.430 回答
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
于 2012-08-20T16:06:26.200 回答
1

要扩展 Abhijit 答案,您可以使用 itertools 生成器作为列表理解中的可迭代对象。

>>> [ n for n in itertools.chain(l1, l2, l3) ]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2012-08-20T17:39:05.883 回答
0

如果您的意思是您有 3 个长度相等的列表,并且您想将它们的内容打印为 3 列,那么如何 zip() 连接列,并在每次迭代时对 print() 进行列表理解:

[ print(row) for row in zip(l1, l2, l3) ]

以上将打印元组的代表。如果要以其他方式格式化值:

[ print("{} / {} / {}".format(*row)) for row in zip(l1, l2, l3) ]

没有人说你必须使用列表推导的输出。

于 2017-12-20T19:28:07.957 回答