2

私はこの非常に単純なことを、イテレータを1つだけ含む、よりpythonisticな方法で実行しようとしています:

>>>for i in xrange(10):
...    for j in xrange(i+1,10):
...        print i,j
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 3
2 4
2 5
2 6
2 7
2 8
2 9
3 4
3 5
3 6
3 7
3 8
3 9
4 5
4 6
4 7
4 8
4 9
5 6
5 7
5 8
5 9
6 7
6 8
6 9
7 8
7 9
8 9

私がやりたいのは、次のようなもので、イテレータは 1 つだけです。

>>>from itertools import tee
>>>iter1=iter(xrange(10))
>>>for i in iter1:
...    iter2=tee(iter1,1)[0]
...    for j in iter2:
...        print i,j

これは明らかに機能せず、次のようになります。

0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8 
0 9

iter2 までずっと反復したときから、iter1 までずっと反復しました。

これを達成する方法はありますか?私はPython-2.7を使用しています

編集:私がやりたいことは、数字だけでなく、反復可能なものでも同じことです。

4

1 に答える 1

3

itertools.combinationsを使用します。

import itertools
for i, j in itertools.combinations(range(10), 2):
    print i, j

EDITは質問のEDITに対応します

itertools.combinations は iterable を受け入れます。例えば、

>>> import itertools
>>> 
>>> def gen():
...     yield 'egg'
...     yield 'spam'
...     yield 'ham'
... 
>>> for i, j in itertools.combinations(gen(), 2):
...     print i, j
... 
egg spam
egg ham
spam ham
于 2013-08-02T07:45:15.397 に答える