Python 如何制作这样一个可折叠的物体?

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

问题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 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(),