5
r = range(10) 

for j in range(maxj):
    # get ith number from r...       
    i = randint(1,m)
    n = r[i]
    # remove it from r...
    r[i:i+1] = []

回溯我收到一个奇怪的错误:

r[i:i+1] = []
TypeError: 'range' object does not support item assignment

不知道为什么会抛出这个异常,他们是否在 Python 3.2 中改变了一些东西?

4

2 回答 2

6

很好的猜测:他们确实改变了一些东西。Range 曾经返回一个列表,现在它返回一个可迭代的 range 对象,很像旧的 xrange。

>>> range(10)
range(0, 10)

您可以获取单个元素但不能分配给它,因为它不是列表:

>>> range(10)[5]
5
>>> r = range(10)
>>> r[:3] = []
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    r[:3] = []
TypeError: 'range' object does not support item assignment

您可以简单地调用 range 对象上的 list 来获取您习惯的内容:

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> r = list(range(10))
>>> r[:3] = [2,3,4]
>>> r
[2, 3, 4, 3, 4, 5, 6, 7, 8, 9]
于 2012-02-01T05:08:27.400 回答
2

试试这个来修复(我不是 python 3.0 的专家 - 只是在这一点上推测)

r = [i for i in range(maxj)]
于 2012-02-01T05:05:08.617 回答