【发布时间】:2019-08-16 09:47:28
【问题描述】:
Python doc 说
列表推导式提供了一种创建列表的简洁方式。
Python doc 好像没有说(可能这个说法不正确,如果需要请修正)
“列表推导比 for 循环更快”
这里有两个函数
def find_base_match_v1(char, matrix):
base_matches = []
for row_index, row in enumerate(matrix):
for column_index, column in enumerate(row):
if char == column:
base_matches.append((row_index, column_index))
return base_matches
def find_base_match_v2(char, matrix):
base_matches = [(row_index, column_index)
for row_index, row in enumerate(matrix)
for column_index, column in enumerate(row)
if char == column]
return base_matches
函数v1的性能(for循环方法)
timeit "find_base_match_v1('d', grid)"
10.6 ns ± 0.419 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)
函数v2的性能(列表理解方法)
timeit "find_base_match_v2('d', grid)"
12.1 ns ± 1.74 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)
有时结果是相反的,v2 比 v1 快一点。
无论如何,不能保证哪一个一定比另一个快,我的理解对吗?
【问题讨论】:
-
它简洁,即打字和阅读更短。没有任何关于以一种或另一种方式表现的说法......
-
您确定您测量的是函数调用而不仅仅是字符串创建吗?即使是空网格的函数调用也会在我的机器上使用
453 ns