我正在尝试两次迭代数组,以获得元素对(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
我仍然相信有更好的、更符合Python风格的解决方案。欢迎提出任何建议。
itertools.combinations
是什么? - BrenBarn