具体地说,我有一个像这样的列表:[[1,2,3], [4,5,6], [7,8,9], [10]]
,我想这样打印出来:
1 2 3
4 5 6
7 8 9
10
我认为这样会很有效:
a = [[1,2,3], [4,5,6], [7,8,9], [10]]
for sublist in a:
print(*sublist)
但是在很大的情况下,它没有我希望的那样高效。我正在处理数千个子列表,每个子列表本身都有数千个数字。
我可能已经处理了子列表,所以数字是字符串或整数,那部分并没有太大关系。我只需要让我的代码运行得更快,就目前而言,打印花费的时间最长。
答案 0 :(得分:4)
可以说,大多数打印开销来自“设置”和“减少”打印逻辑。因此,如果将所有内容组合成一个长字符串然后打印,它应该会更快:
print('\n'.join(' '.join(map(str, sub)) for sub in a))
我的时间分析结果(给出以下数据)和三种解决方案:
a = [list(range(10)), list(range(10, 20)), list(range(20, 30))]
# OP's original solution
%timeit for sublist in a: print(*sublist)
# 1.74 ms ± 89.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# another answer's solution
%timeit res = [' '.join(map(str,item)) for item in a]; print(*res, sep='\n')
# 191 µs ± 17.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# my solution
%timeit print('\n'.join(' '.join(map(str, sub)) for sub in a))
# 78.2 µs ± 5 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
答案 1 :(得分:1)
首先将内部列表作为字符串连接起来,以创建字符串列表。
然后使用迭代器拆包解压缩内部列表,并使用\n
作为分隔符。
li = [[1,2,3], [4,5,6], [7,8,9], [10]]
#Join the inner lists as a string to make a list of strings
#Print them using newline separator
print(*[' '.join(map(str,item)) for item in li], sep='\n')
输出为
1 2 3
4 5 6
7 8 9
10
另外,按照注释中的@DYZ来打印thousands of sublists, and each of those are themselves thousands of numbers
也没有意义,您可以说一个间隔来保存它们,例如[[1,3],[4,6],[7,9],[10]