配列を 2 回繰り返して要素のペア (e_i、e_j) を取得しようとしていますが、i < j のような要素のみが必要です。
基本的に、私が望むのは、C ライクな言語です。
int my_array[N] = ...;
for (int i=0; i<N; i++)
for (int j=i+1; j<N; j++)
something(my_array[i],my_array[j]);
私が探していたものがitertoolsで見つかりませんでした(私が見つけた最も近いものは でしたitertools.product(*iterables[, repeat])
)。
私はいくつかのことを試しましたが、私はそれらのどれにも本当に納得していません:
my_list=range(10)
# Using enumerate and slices - explicit loop
res=[]
for i,j in enumerate(my_list):
for k in my_list[i+1:]:
res.append((j,k))
print res
# Using enumerate and slices - list comprehension
res=[(j,k) for i,j in enumerate(my_list) for k in my_list[i+1:]]
print res
# Using enumerate and xrange - explicit loop
res=[]
for i,j in enumerate(my_list):
for k in range(i+1, len(my_list)):
res.append((j,my_list[k]))
print res
# Using enumerate and xrange - list comprehension
res=[(j,my_list[k]) for i,j in enumerate(my_list) for k in range(i+1, len(my_list))]
print res
私はまだ、より良い、よりpythonicな解決策があると確信しています。どんな提案でも大歓迎です。