Python:打印列表列表的最有效方法是什么?

时间:2019-05-18 04:55:47

标签: python list performance printing nested-lists

具体地说,我有一个像这样的列表:[[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)

但是在很大的情况下,它没有我希望的那样高效。我正在处理数千个子列表,每个子列表本身都有数千个数字。

我可能已经处理了子列表,所以数字是字符串或整数,那部分并没有太大关系。我只需要让我的代码运行得更快,就目前而言,打印花费的时间最长。

2 个答案:

答案 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]