0
当在Python 3中使用random
模块random.shuffle(list(range(n)))
工作,但random.shuffle(range(n))
没有。为什么random.shuffle(list(range(n)))有效,但random.shuffle(range(n))不?
这是为什么?
当我输入type(range(n))
时,它返回range
。
当在Python 3中使用random
模块random.shuffle(list(range(n)))
工作,但random.shuffle(range(n))
没有。为什么random.shuffle(list(range(n)))有效,但random.shuffle(range(n))不?
这是为什么?
当我输入type(range(n))
时,它返回range
。
Python 3的range
现在返回一个范围对象(构造一个不变的序列)而不是一个列表(如Python 2)!
一个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交换两个变量的Python的路,这是大多数随机算法中的常见操作(如Fisher-Yates)。
的docs也提到了这一点(如果你想整理序列):
要洗牌不可变的序列,并返回一个新的洗牌列表,使用样品(X,K = LEN(X)),而不是
那么这将工作(和相当于给出洗牌的任务):
shuffled_list = random.sample(range(n), k=n)
你首先创建一个列表的方式也未尝不可,如果你能负担得起的内存/时间。
您的问题涉及哪种语言? – Smile4ever
谢谢你,这是python –
你的问题是不正确的,如书面。输入'random.shuffle(list(range(n)))'不会**工作,因为'random.shuffle'就地工作并且不返回任何东西。将它应用到动态创建的参数将不会产生任何可见的结果。 – pjs