【发布时间】:2017-12-15 02:39:41
【问题描述】:
我有一个这样的二维字符列表:
a = [['1','2','3'],
['4','5','6'],
['7','8','9']]
将列表作为一个整体打印的最 Pythonic 方式是什么? IE。没有逗号或括号:
123
456
789
【问题讨论】:
标签: python list multidimensional-array
我有一个这样的二维字符列表:
a = [['1','2','3'],
['4','5','6'],
['7','8','9']]
将列表作为一个整体打印的最 Pythonic 方式是什么? IE。没有逗号或括号:
123
456
789
【问题讨论】:
标签: python list multidimensional-array
我认为最好的方法是使用print 函数。使用print 函数,您将不需要任何类型的连接和转换(如果所有对象都不是字符串)。
>>> a = [['1','2','3'],
... ['4', 5, 6], # Contains integers as well.
... ['7','8','9']]
...
>>> for x in a:
... print(*x, sep='')
...
...
123
456
789
如果您使用的是 Python 2,则可以使用 from __future__ import print_function 导入打印功能。
【讨论】:
有很多方法。可能是str.joins 的映射的str.join:
>>> a = [['1','2','3'],
... ['4','5','6'],
... ['7','8','9']]
>>> print('\n'.join(map(''.join, a)))
123
456
789
>>>
【讨论】:
join(map('' 和 join([''.join(x) for x in a])。在后者中,外部join 知道列表和项目的大小并一次性分配输出字符串。
list 可能会更快。很可能,此代码不会对性能至关重要。从风格和易用性的角度来看,我可以接受。
map弥补了listcomp的速度损失。生成器理解将是最慢的。
print('\n'.join(list(map(''.join, a))))。无论如何,您可以使用 timeit 对几个大列表进行基准测试模块。确实,文档中的“基本示例”与您的情况非常相似...
如果您正在寻找 Pythonic,那么您肯定需要生成器理解:
print('\n'.join(''.join(i) for i in array))
【讨论】:
join 的情况下,传递一个列表理解反而更快,因为join 无论如何都会创建一个(需要预先计算大小):'\n'.join([''.join(i) for i in array]) 即使它更丑:)
像这样:
import os
array = [['1','2','3'],
['4','5','6'],
['7','8','9']]
print(os.linesep.join(map(''.join, array)))
【讨论】: