美好的一天,我用谷歌搜索了这个问题并找到了类似的答案,但不是我要找的答案。我不确定这个问题叫什么,所以这对我没有帮助,我正在寻找一个优雅的解决方案。
我如何一次遍历一个列表,一个项目,并将其与列表中的所有其他项目进行比较。例如,如果我有一个列表
l = [1,2,3,4]
out 的每个循环都会产生类似的东西
- 1 对 [2,3,4]
- 2 对 [1,3,4]
- 3 对 [1,2,4]
- 4 对 [1,2,3]
我一直在尝试的一个解决方案涉及每次迭代都复制列表,找到项目的索引,将其从重复列表中删除并比较两者。这条路线似乎不太理想,因为您必须在每次迭代时创建一个新列表。
请您参考如下方法:
您可以使用 itertools.combiations从列表中创建长度为 3 的所有组合,然后使用 set.defference 方法获取 l 和组合之间的差异元素。但请注意,您需要将主列表转换为 set 对象:
>>> from itertools import combinations
>>> l = {1,2,3,4}
>>> [(l.difference(i).pop(),i) for i in combinations(l,3)]
[(4, (1, 2, 3)), (3, (1, 2, 4)), (2, (1, 3, 4)), (1, (2, 3, 4))]
