Python中将列表打印到表格上

4
如果我有三个列表,例如:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]

我想以以下方式打印它

1  4  7
2  5  8
3  6  9

我该怎么做呢?


也许会有重复的链接 https://dev59.com/YGYs5IYBdhLWcg3wAfPO,https://dev59.com/yGkw5IYBdhLWcg3ws8pj,https://dev59.com/dW025IYBdhLWcg3wl3O-。 - gustavodiazjaimes
3个回答

8
这个问题的难点在于对数组的转置,不过使用zip函数很容易解决:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
t = zip(a, b, c)

现在您只需要将其打印出来:
print('\n'.join('  '.join(map(str, row)) for row in t))

2
在我看来,这是一个非常易读的解决方案。我喜欢将zip文件与其他答案分开,因为转置和显示本质上是不同的操作。 - Thane Brimhall

6
这应该会做到:
'\n'.join(' '.join(map(str,tup)) for tup in zip(a,b,c))

3
如果没有其他理由,那么+1的原因就在于你在36秒内回答了这个问题。 - John
1
我认为你想要' ',因为OP在列之间有两个空格。或者保留它作为' ',并使用str(x).ljust(2)而不是str - abarnert
等一下,这是错误的... OP 正试图打印转置的列表。 - abarnert
这并没有给出OP所要求的输出。 - dansalmo
@abarnert -- 谢谢。直到你提到它,我才注意到这一点。 - mgilson

2

使用生成器表达式代替map函数的列表推导:

'\n'.join(' '.join(str(y) for y in x) for x in zip(a,b,c))

首先,在你只需要映射一个已经存在的好名字函数时,为什么不使用 map 呢?是的,当你需要构建一个 lambda 或者 partial 时,它会变得不那么易读,但在这种情况下,我认为它更易读。(另外,你这里并没有列表推导式,而是一个生成器表达式。) - abarnert
@abarnert:你刚刚自己回答了你的问题:map函数不必要地创建了一个列表,而我使用生成器表达式(对于错误的命名表示抱歉,已经更正)。生成器比列表更加简洁。我还应该使用zip的函数等效形式,因此将from itertools import izip as zip添加到脚本的顶部。 - pvoosten
实际上,当你给join一个迭代器时(至少在CPython和PyPy中,可能在所有实现中),它会创建一个列表。此外,在3.x中,map不会创建一个列表。最重要的是,创建一个只有3个元素的列表的性能影响是如此微不足道,以至于进行这种讨论是愚蠢的。使用更易读的那个即可。 - abarnert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接