Python 如何制作这样一个可折叠的物体?
问题1 如何制作如下所示的iterable对象:Python 如何制作这样一个可折叠的物体?,python,list,Python,List,问题1 如何制作如下所示的iterable对象: 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 .... 问题2 如果在上面的对象上使用列表(obj),这会消耗机器的内存吗?如何预防 请不要使用python2您可以制作一个上下计数的无限生成器: def updown(n): while True: for i in range(n): yield i for
0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1 ....
问题2
如果在上面的对象上使用列表(obj),这会消耗机器的内存吗?如何预防
请不要使用python2您可以制作一个上下计数的无限生成器:
def updown(n):
while True:
for i in range(n):
yield i
for i in range(n - 2, 0, -1):
yield i
uptofive = updown(6)
for i in range(20):
print uptofive.next(),
将输出:
0 1 2 3 4 5 4 3 2 1 0 1 2 3 4 5 4 3 2 1
你无法阻止list(updown(6))
尝试消耗所有内存,不。正如医生所说:“那就不要这样做!”
改为使用.next()
调用,或者将生成器与另一条语句一起使用,以限制在生成器上迭代的次数。政府会这样做:
import itertools
list(itertools.islice(updown(6), 20))
另一种方法是使用
itertools.cycle()
:
谢谢,我将提出两个问题。因此,如果这是家庭作业,我们非常感谢您使用
家庭作业标记,这样我们就可以帮助您学习,而不是只交答案。您的答案中有一个重复的“5”。在Python 2中,xrange
在这种情况下可能会更好一些。@cdarke:对于小范围,不要麻烦,而且它可以使它在不太麻烦的情况下保持便携。@mhawke:什么傻瓜5?无辜的whistle@MartijnPieters当前位置恐怕后来居上的人看不到这个笑话:)
from itertools import cycle
def oscillator(start, stop):
# assumes stop >= start
return cycle(range(start, stop+1) + range(stop-1, start, -1))
o = oscillator(0, 5)
for i in range(30):
print o.next(),