循环访问列表,同时在下次迭代时跳过该项



我很难正确描述我的问题,这就是为什么我没有找到解决方案,而我 100% 确定那里有一个......因此,如果我的问题不是独一无二的,请不要对我生气。 所以下面,我尝试描述我需要做什么。基本上通过列表进行迭代,同时在下一次迭代时跳过该项目。跳过的项是 for 循环中的项。

list = [item1,item2,item3,item4,item5]
item1+item2 => item1+item3 => item1+item4 => item1+item5
next iteration
item2+item3 => item2+item4 => item2+item5
next iteration
item3+item4 => item3+item5
last iteration
item4+item5

以下是使用列表推导的方法:

[i + j for ix, i in enumerate(l) for j in l[ix+1: len(l)]]

检查一个简单的示例:

l = [4,2,1,4,2]
[i + j for ix, i in enumerate(l) for j in l[ix+1: len(l)]]
[6,  5,   8,   6,   3,   6,   4,   5,   3,   6]
4+2  4+1 4+4  4+2  2+1  2+4  2+2  1+4  1+2  4+2

您可以使用itertools.combinations

from itertools import combinations
lst = ['item1', 'item2', 'item3', 'item4', 'item5']
print(list(map('+'.join, combinations(lst, 2))))

这输出:

['item1+item2', 'item1+item3', 'item1+item4', 'item1+item5', 'item2+item3', 'item2+item4', 'item2+item5', 'item3+item4', 'item3+item5', 'item4+item5']

你可以试试这个。

_list = [item1,item2,item3,item4,item5] 
for i in range(len(_list)):
for j in range(i+1,len(_list)):
print(_list[i],_list[j])

不要使用内置名称和关键字作为变量名称。

最新更新