在Python2.7中,以下操作没有问题:
myrange = range(10,100,10)
myrange.append(200)
print(my range)产出: 10,20,30,40,50,60,70,80,90,200
相反,在Python3.3.4中,相同的代码片段返回错误:'range‘对象没有属性'append'
请有人在Python3.3.4中解释这个错误的原因,并在可能的情况下提供一个解决方案。
期望输出: 10,20,30,40,50,60,70,80,90,200。
事先非常感谢,mrj。
发布于 2014-03-16 13:13:32
在Python2中,range返回一个列表。
在Python3中,range返回一个range object。range对象没有附加方法。若要修复,请将range对象转换为列表:
>>> myrange = list(range(10,100,10))
>>> myrange.append(200)
>>> myrange
[10, 20, 30, 40, 50, 60, 70, 80, 90, 200]range对象是一个迭代器。它故意避免形成所有值的列表,因为这需要更多的内存,而且人们通常使用range只是为了跟踪计数器--这种用法不需要立即将完整的列表保存在内存中。
来自the docs
与常规列表或元组相比,range类型的优点是,range对象将始终占用相同(小)内存量,而不管它所代表的范围的大小(因为它只存储开始值、停止值和步骤值,根据需要计算单个项和子范围)。
发布于 2014-03-16 13:54:22
检查unutbu的答案,了解为什么不能附加到range()。
但是,保留range()-s迭代方法,使用itertools.chain(),而不是强制将其添加到列表中,然后追加到列表中。它速度更快,效率更高。
>>> 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对象。
https://stackoverflow.com/questions/22437297
复制相似问题