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

Python:打印列表的最有效方法是什么?,python,list,performance,printing,nested-lists,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]] 对于a中的子列表: 打印*子列表 但在很大的情况下,它并不像我希望的那样高效。我处理的是数千个子列表,每个子列表本身都有数千个数字 我可以让子列表已经处理过,所以数字是字符串或整数,这一部分不太重要。我只需要让我的代码运行得更快,目前,打印所花费的

具体来说,我有一个这样的列表:[[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]] 对于a中的子列表: 打印*子列表 但在很大的情况下,它并不像我希望的那样高效。我处理的是数千个子列表,每个子列表本身都有数千个数字


我可以让子列表已经处理过,所以数字是字符串或整数,这一部分不太重要。我只需要让我的代码运行得更快,目前,打印所花费的时间最长。

首先将内部列表作为一个字符串连接起来,形成一个字符串列表

然后使用迭代器解包来解包内部列表,并使用\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,您可以使用一个间隔来保存它们,例如[[1,3]、[4,6]、[7,9]、[10]

可以说,打印的大部分开销来自设置和分解打印逻辑。因此,如果将所有内容组合成一个长字符串,然后打印,速度应该会快得多:

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,3]、[4,6]、[7,9]、[10]@DYZ不是很明显,我知道-但这些都是compsci学生必须克服的困难!@deveshkumarsing你能把你的答案放回去吗?我重新加载了页面,它就不见了。我不是那个否决它的人。谢谢你的提示。这确实缩短了我的运行时间。顺便说一句,你忘记了代码中的*了,在在列表理解之前的打印语句。谢谢您让我知道。@ SuniCalg.如果答案对您有帮助。请考虑将它标记为接受的:如果您想用[]打印子列表,也可以。这将不需要连接,不确定你是否想要这样做,虽然列表列表来自一个非常大的有向图,所以我不能只使用这样的范围不幸的是…对不起,我应该在问题上更清楚一些。我会把问题留长一点,但我已经投票给你了。当然,我想其他大多数海报都会提示你不要使用这样的数组,尽管像上面的评论一样,或者是时候重新设计有向图了,我也不确定你为什么要首先打印它们@SonicProtein:有没有比使用这样的数组更好的方法?我首先操作有向图,然后打印输出。打印需要的时间最长,最长比图形操作更长的时间,这就是为什么我在考虑如何优化打印-但也许我从一开始就错了,正如你所说,我应该考虑不使用那样的数组。问题是,这是我在uni的班级正在研究的一个问题,显然可以在更短的时间内完成,同时仍然使用列表列表。这就是为什么我需要打印出这么多的输出-这是为了uni@DeveshKumarSingh根据我的测试,解释为什么加入会使它更快,以及外部加入调用,它会导致2-4倍的加速。@deveshkumarsing不用担心: