如果我有三个列表,例如:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
我想以以下方式打印它
1 4 7
2 5 8
3 6 9
我该怎么做呢?
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))
'\n'.join(' '.join(map(str,tup)) for tup in zip(a,b,c))
' '
,因为OP在列之间有两个空格。或者保留它作为' '
,并使用str(x).ljust(2)
而不是str
。 - abarnert使用生成器表达式代替map函数的列表推导:
'\n'.join(' '.join(str(y) for y in x) for x in zip(a,b,c))
map
呢?是的,当你需要构建一个 lambda
或者 partial
时,它会变得不那么易读,但在这种情况下,我认为它更易读。(另外,你这里并没有列表推导式,而是一个生成器表达式。) - abarnertfrom itertools import izip as zip
添加到脚本的顶部。 - pvoostenjoin
一个迭代器时(至少在CPython和PyPy中,可能在所有实现中),它会创建一个列表。此外,在3.x中,map
不会创建一个列表。最重要的是,创建一个只有3个元素的列表的性能影响是如此微不足道,以至于进行这种讨论是愚蠢的。使用更易读的那个即可。 - abarnert