在使用pythons的random.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))
发布于 2020-11-28 01:33:40
在CPython (参考解释器)上,random.shuffle
是用Python语言实现的(并且是用_randbelow
实现的,它本身就是一个围绕getrandbits
的Python包装器,它是最终实现它的C级函数,为了确保输出是无偏的,它最终被调用的频率几乎是严格要求的两倍);sorted
(和random.random
)是用C语言实现的。
https://stackoverflow.com/questions/65045565
复制