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

问题描述 投票:0回答:3

在 Python 2.7 中,以下内容可以正常工作:

myrange = range(10,100,10)
myrange.append(200)
print(my range)

输出:[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]。

提前非常感谢, 先生。

python python-2.7 python-3.x append range
3个回答
50
投票

在Python2中,

range
返回一个列表。

在Python3中,

range
返回一个范围对象。 range 对象没有append 方法。要修复此问题,请将范围对象转换为列表:

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

范围对象是一个迭代器。它有目的地避免形成所有值的列表,因为这需要更多内存,并且人们通常使用

range
只是为了跟踪计数器 - 这种用法不需要立即将完整列表保存在内存中。

来自文档

范围类型相对于常规列表或元组的优点是 范围对象将始终占用相同(少量)的内存,不 不管它代表的范围的大小(因为它只存储 开始、停止和步骤值,计算单个项目和 根据需要划分子范围)。


12
投票

检查 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]

注意: 这里

list(c)
也强制了
chain
对象并且仅用于表示。请在
chain
循环中使用
for
对象。


-1
投票

这里列出(c)需要很多时间。我们只需要:

>>> c = list()

这样更有效率!!!

© www.soinside.com 2019 - 2024. All rights reserved.