0

サイクルでリストをループしたい。例: 配列に 3 つの要素がある 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]

4

6 に答える 6

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
于 2013-09-06T02:17:10.940 に答える
1

増加するインデックスを使用し、モジュロ(除算の剰余)を使用できます

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)
于 2013-09-06T02:20:53.687 に答える
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
于 2013-09-06T02:21:11.970 に答える
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
于 2013-09-06T02:21:27.043 に答える
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)]
于 2013-09-06T02:48:36.873 に答える
0

itertoolsドキュメントに使用できるレシピがあります。

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)
# ...
于 2013-09-06T02:42:32.287 に答える