Skip to main content
 首页 » 编程设计

python之在 Python 中扩展范围

2025年05月04日14jackei

我需要一个包含 range(3,666,2) 和 2(顺便说一句,用于埃拉托色尼筛法)的循环。这不起作用(“AttributeError:‘range’对象没有属性‘extend’”……或“append”):

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

我怎样才能用简单直观的 python 风格的方式做到这一点?

请您参考如下方法:

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。