Python:在到达结尾时循环切换列表中的元素

时间:2015-05-29 12:51:43

标签: python list cycle

我有一个类似的列表:

a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']

我需要一次循环遍历此列表一个元素,但是当到达列表的末尾时,循环需要反转

例如,使用itertools.cycle

from itertools import cycle
a_cycle = cycle(a)
for _ in range(30):
    print a_cycle.next()

我明白了:

01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10

但我需要的是:

01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 10, 09, 08, 07, 06, 05, 04, 03, 02, 01, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10

我需要循环a一段固定的次数,比如200。

4 个答案:

答案 0 :(得分:10)

您可以cycle achain a的{​​{3}},例如:

from itertools import cycle, islice, chain

a = range(1, 11)
b = reversed(a)
c = cycle(chain(a, b))
d = list(islice(c, 100)) # `c` is infinite - hence the `islice` to stop at some point...

这给了你:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

注意:如果a是一个耗尽的迭代器,则需要先复制a。但是举个例子,这很好。

答案 1 :(得分:3)

你真的需要循环通过列表,就像前进和后退永远一样吗?或者只是.reverse()列表?

print a + a[::-1]

会做你所描述的。 reversed()内置函数也有效,但你需要chain()它,因为它返回一个迭代器,例如:

print list(itertools.chain(a, reversed(a)))

您可以在任一结果上调用itertools.cycle()以获得与其反向连接的列表的无限迭代器。

答案 2 :(得分:2)

def forwardback(lst):
    tot = len(lst)
    while 1:
        for i in xrange(tot):
            yield lst[i]
        for i in xrange(tot-1,-1,-1):
            yield lst[i]

或(使用cycle的方法,适用于所有迭代器)

def forwardback(lst):
    saved = []
    for elem in lst:
        yield elem
        saved.append(elem)
    while saved:
        for elem in reversed(saved):
            yield elem
        for elem in saved:
            yield elem

答案 3 :(得分:2)

制作一份清单a,将其反转,然后追加。

a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
b = a[:]
b.reverse()
a = a + b

或基于评论建议。

a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
b = a[::-1]
a = a + b