Liv*_*viu 1 python range python-3.x
我需要一个包含range(3,666,2)2和2 的循环(顺便说一下,对于Eratosthenes的筛子).这不起作用("AttributeError:'range'对象没有属性'extend'"......或"append"):
primes = range(3,limit,2)
primes.extend(2)
Run Code Online (Sandbox Code Playgroud)
我怎么能以简单直观的pythonesque方式做到这一点?
range()在Python 3中返回一个专用的不可变序列对象.你必须把它变成一个列表来扩展它:
primes = list(range(3, limit, 2))
primes.append(2)
Run Code Online (Sandbox Code Playgroud)
请注意,我使用过list.append(),而不是list.extend()(它需要一系列值,而不是一个整数).
但是,您可能希望开始循环2,而不是结束它.此外,将整个范围具体化为列表需要一些记忆并且杀死对象的效率.使用迭代器链接:
from itertools import chain
primes = chain([2], range(3, limit, 2))
Run Code Online (Sandbox Code Playgroud)
现在你可以循环primes而不在内存中实现整个列表,并且仍然包含2在循环的开头.
如果您只是循环而不想实现,那么:
from itertools import chain
primes = chain([2], range(3, limit, 2))
Run Code Online (Sandbox Code Playgroud)
我认为这两个在开始时更有意义......