【发布时间】:2018-08-20 23:46:12
【问题描述】:
我想生成一个随机列表,
In [20]: num_arr = list(range(10))
In [22]: random.shuffle(num_arr)
In [23]: print(num_arr)
[8, 0, 7, 3, 9, 4, 1, 2, 6, 5]
不过,我试过了
In [24]: num_arr = range(10)
In [25]: random.shuffle(num_arr)
TypeError: 'range' object does not support item assignment
我打算了解为什么它不起作用背后的机制?
你能提供任何提示吗?
【问题讨论】:
-
看起来随机播放功能使用像
obj[0]这样的项目分配来就地移动项目。 -
如果你使用
random.sample(),你可以为所欲为。 -
欢迎使用 python 3...
shuffle(range())在 python 2.7 中工作正常 =) -
您使用的是 Python 3 吗?我在 Python 2.7 上试过了,没有问题。 Python 2.7 中的
range()返回list,但我知道 Python 3 将range()更改为与 Python 2 中的xrange()相同,因此可能存在差异。 -
@lenik:
shuffle(range())是毫无意义的,如果你真的在调用中构造了新的range。random.sample(range(n), n)至少会有用(因为它构造并返回一个全新的list)。
标签: python python-3.x