在python中构造一个循环循环

时间:2013-09-06 02:15:40

标签: python arrays cyclic

我想循环一个列表。 例:我在数组中有三个元素L = [1,2,3] 我想把输出作为

L [0],L [1]

L [1],L [2]

L [2],L [0]

是否有一种简单的方法可以获得稍微不同的输出

L [0],L [1]

L [1],L [2]

L [0],L [2]

6 个答案:

答案 0 :(得分:3)

使用模数运算符

>>> a = [1,2,3]
>>> for x in range(10):
        print a[x % len(a)]

使用itertools.cycle

>>> iterator = cycle(a)
>>> for _ in range(10):
        print next(iterator)

至于你的输出,你可以这样做。

>>> for x in range(10):
        print '{0}, {1}'.format(a[x % len(a)], a[(x+1) % len(a)])

>>> 1, 2
>>> 2, 3
>>> 3, 1
... etc etc

答案 1 :(得分:1)

你可以使用增加索引,并使用modulo(除法的余数)

myList = [1,2,3]
for i in xrange(len(myList)):
    myTuple = (myList[i],myList[(i+1)%len(myList)])
    print myTuple

将产生:

(1,2)
(2,3)
(3,1)

答案 2 :(得分:1)

您可以尝试类似

的内容
L = [1,2,3]
length = len(L)
for i in xrange(length):
        print L[i % length], L[(i+1) % length]

输出

1 2
2 3
3 1

通过这种方式,您可以执行类似xrange(10)的操作,并且仍然可以循环使用

1 2
2 3
3 1
1 2
2 3
3 1
1 2
2 3
3 1
1 2

答案 3 :(得分:1)

l = [0,1,2,3]
for i in xrange(0, len(l)):
    print l[i], l[(i+1) % len(l)]


0 1
1 2
2 3
3 0

答案 4 :(得分:0)

您可以使用itertools documentation中的食谱:

import itertools
def pairwise(iterable):
    a, b = itertools.tee(iterable)
    next(b, None)
    return itertools.izip(a, b)

请使用itertools.cycle(L)调用此信息,然后您就可以了:

L = [1, 2, 3]
for pair in pairwise(itertools.cycle(L)):
    print pair
# (1, 2)
# (2, 3)
# (3, 1)
# (1, 2)
# ...

答案 5 :(得分:0)

您的意思是组合吗? http://en.wikipedia.org/wiki/Combination

from itertools import combinations
comb = []
for c in combinations([1, 2, 3], 2):
    print comb.append(c)

对于排序,您可以使用

sorted(comb, key=lambda x: x[1])

输出:

[(1, 2), (1, 3), (2, 3)]