배열 쌍을 두 번 반복하려고합니다 (e_i, e_j)하지만 나는 요소를 원합니다. < 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.product(*iterables[, repeat])
이었다) itertools에서 찾던 찾지 못했습니다.
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
나는 아직도 더 많은 파이썬 솔루션이 있음을 확신합니다. 어떤 제안이라도 환영합니다.
'itertools.combinations'는 어떤가요? – BrenBarn