gpt4 book ai didi

python - 为什么 random.shuffle(list(range(n))) 有效,但 random.shuffle(range(n)) 无效?

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:50 30 4
gpt4 key购买 nike

当在 Python 3 中使用 random 模块 random.shuffle(list(range(n))) 时,但是 random.shuffle(range( n)) 没有。

为什么会这样?

当我键入 type(range(n)) 时,它返回 range

最佳答案

Python 3 的 range 现在返回一个范围对象(一个不可变序列)而不是一个列表(像 Python 2)!

A range-object (除其他差异外)不支持项目分配,这是您观察到的错误(可能):

File ".../random.py", line 272, in shuffle
x[i], x[j] = x[j], x[i]
TypeError: 'range' object does not support item assignment

第 272 行是在 python 中交换两个变量的 pythonic 方式,这是大多数洗牌算法(如 Fisher-Yates)中的常见操作。

docs还提到了这一点(如果你想打乱顺序):

To shuffle an immutable sequence and return a new shuffled list, use sample(x, k=len(x)) instead

所以这将起作用(并且与洗牌任务等效):

shuffled_list = random.sample(range(n), k=n)

如果您能负担得起这样做所需的内存/时间,您首先创建列表的方法也很好。

关于python - 为什么 random.shuffle(list(range(n))) 有效,但 random.shuffle(range(n)) 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45482831/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com