扩展Python范围

时间:2014-01-16 12:16:44

标签: python python-3.x range

我需要一个包含range(3,666,2)和2的循环(顺便提一下,对于Eratosthenes的筛子)。这不起作用(“AttributeError:'range'对象没有属性'extend'”......或“append”):

primes = range(3,limit,2)
primes.extend(2)

我怎么能用简单直观的pythonesque方式做到这一点?

2 个答案:

答案 0 :(得分:6)

Python 3中的

range()返回一个专用的不可变序列对象。你必须把它变成一个列表来扩展它:

primes = list(range(3, limit, 2))
primes.append(2)

请注意,我使用的是list.append(),而不是list.extend()(需要序列的值,而不是一个整数)。

但是,你可能希望开始你的2循环,而不是结束它。此外,将整个范围具体化为列表需要一些记忆并且杀死对象的效率。请改用迭代器链接:

from itertools import chain

primes = chain([2], range(3, limit, 2))

现在你可以循环primes而不在内存中实现整个列表,并且在循环开始时仍然包含2

答案 1 :(得分:5)

如果您只是循环而不想实现,那么:

from itertools import chain
primes = chain([2], range(3, limit, 2))

我认为这两个在开始时更有意义......