我目前正在学习 Python 3,并认为一些速度比较可能会很简洁。因此,我创建了一些就地函数和一些临时列表函数,它们只是将 1 添加到一长串整数中。
但是,结果确实令我惊讶……似乎 Python 3 在每个用例中都比较慢:不同的测试 for 循环、while 循环、map 函数和列表推导式。
当然(参见下面的代码)它只是比较就地列表突变或构建并返回临时列表的循环......所以例如Python 3 的“标准”映射仅创建一个迭代器,仍然很快,但在某些时候人们总是希望打印、写入或以某种方式可视化数据。因此,像 list(map())
这样的东西在 Python 3 中应该相对常见?!
我在这里缺少什么?
Python 3 的循环、推导式和映射真的比 Python 2 慢吗?如果是这样,为什么?
<小时/>Python 3.4 计时:
> python3.4 func_speed_tests.py
list_comprehension.........1.2785s
for_loop...................1.9988s
for_loop_append............1.8471s
for_loop_range.............1.7585s
while_loop.................2.2539s
calc_map...................2.0763s
Python 2.7 计时:
> python2.7 func_speed_tests.py
list_comprehension.........0.9472s
for_loop...................1.2821s
for_loop_append............1.5663s
for_loop_range.............1.3101s
while_loop.................2.1914s
calc_map...................1.9101s
<小时/>
这是代码:
import timeit
from random import shuffle
# generate a long list of integers
mlst = list(range(0, 1000000))
# randomly sort the list
shuffle(mlst)
# number of benchmark passes
n = 10
#####################
# functions to time #
#####################
def list_comprehension(lst):
return [x + 1 for x in lst]
def for_loop(lst):
for k, v in enumerate(lst):
lst[k] = v + 1
def for_loop_append(lst):
tmp = []
for item in lst:
tmp.append(item + 1)
def for_loop_range(lst):
for k in range(len(lst)):
lst[k] += 1
return lst
def while_loop(lst):
it = iter(lst)
tmp = []
while it:
try:
tmp.append(next(it)+1)
except StopIteration:
break
return tmp
def calc_map(lst):
lst = map(lambda x: x + 1, lst)
return list(lst)
############################################
# helper functions for timing and printing #
############################################
def print_time(func_name):
print("{:.<25}{:.>8.4f}s".format(func_name, timer(func_name)))
def timer(func):
return timeit.timeit(stmt="{}(mlst)".format(func),
setup="from __main__ import mlst, {}".format(func),
number=n)
#################
# run the tests #
#################
print_time("list_comprehension")
print_time("for_loop")
print_time("for_loop_append")
print_time("for_loop_range")
print_time("while_loop")
print_time("calc_map")
最佳答案
Python3 比 Python2 稍微慢一些。检查pystone benchmark 。如果关心速度,请坚持使用 Python 2.7.0 Release它具有更好的第三方软件包支持。
关于Python 3 : Loops, 列表理解和映射比 Python 2 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261621/