Warm tip: This article is reproduced from serverfault.com, please click

python-为什么random.shuffle比使用sorted函数要慢得多?

(python - Why is random.shuffle so much slower than using sorted function?)

发布于 2020-11-28 01:28:46

使用pythonsrandom.shuffle函数时,我注意到它的使用速度明显快sorted(l, key=lambda _: random.random())random.shuffle(l)据我了解,这两种方式都会产生完全随机的列表,那么为什么shuffle要花这么长的时间呢?

以下是使用timeit模块的时间

from timeit import timeit
setup = 'import random\nl = list(range(1000))'

# 5.542 seconds
print(timeit('random.shuffle(l)', setup=setup, number=10000))

# 1.878 seconds
print(timeit('sorted(l, key=lambda _: random.random())', setup=setup, number=10000))
Questioner
mazore
Viewed
11
ShadowRanger 2020-11-28 09:33:40

在CPython上(参考解释器)random.shuffle是在Python中实现的(其实现_randbelow本身就是一个Python包装器getrandbits,最终实现了它的C级函数,最终被调用的频率几乎是严格需要的两倍)确保输出没有偏见);sorted(和random.random)在C中实现。在Python中执行工作的开销比在C中执行类似的工作要高。