Python 3,range().append()返回错误:'range'对象没有属性'append'

MRJ*_*MRJ 12 python append range python-2.7 python-3.x

在Python 2.7中,以下工作没有问题:

myrange = range(10,100,10)
myrange.append(200)
print(my range)
Run Code Online (Sandbox Code Playgroud)

产量:[10,20,30,40,50,60,70,80,90,200]

相反,在Python 3.3.4中,相同的代码片段返回错误:'range'对象没有属性'append'

请问有人可以在Python 3.3.4中解释这个错误的原因,并在可能的情况下提供解决方案吗?

所需的输出:[10,20,30,40,50,60,70,80,90,200].

非常感谢,先生.

unu*_*tbu 33

在Python2中,range返回一个列表.

在Python3中,range返回一个范围对象.范围对象没有append方法.要修复,请将范围对象转换为列表:

>>> myrange = list(range(10,100,10))
>>> myrange.append(200)
>>> myrange
[10, 20, 30, 40, 50, 60, 70, 80, 90, 200]
Run Code Online (Sandbox Code Playgroud)

range对象是一个迭代器.它有目的地避免形成所有值的列表,因为这需要更多的内存,并且人们通常range仅使用它来跟踪计数器 - 这种用法不需要​​立即在内存中保存完整列表.

来自文档:

范围类型相对于常规列表或元组的优点是范围对象总是占用相同(小)的内存量,无论它表示的范围大小(因为它只存储起始值,停止值和步长值) ,根据需要计算单个项目和子范围.


Szi*_*dam 9

检查unutbu的答案,知道为什么你不能追加到range().

但是,range()通过使用itertools.chain()而不是强制它到列表然后附加到它来保持-s迭代方法.它更快,更有效.

>>> from itertools import chain
>>> c = chain(range(10,100,10), [200])
>>> list(c)
>>> [10, 20, 30, 40, 50, 60, 70, 80, 90, 200]
Run Code Online (Sandbox Code Playgroud)

注意:这里list(c)也强制chain对象并且仅用于表示.请改用循环中的chain对象for.

  • 当然,我只是想指出,建议您坚持使用尽可能长的迭代器。 (2认同)