繁体   English   中英

比较我与Python列表中的其他项目

[英]Compare i vs other items in a Python list

美好的一天,我已经用谷歌搜索了这个问题,并找到了类似的答案,但不是我想要的。 我不确定这个问题叫什么,所以对我没有帮助,我正在寻找一个优雅的解决方案。

如何一次遍历一个列表,一个项目并将其与列表中的所有其他项目进行比较。 例如,如果我有一个列表

l = [1,2,3,4]

每个循环都会产生类似

  1. 1与[2,3,4]
  2. 2与[1,3,4]
  3. 3与[1,2,4]
  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))]

一种简单的方法是使用两个循环:

arr = [1,2,3,4]

for i in arr:
    comp = []
    for j in arr:
        if i != j:
            comp.append(j)
    print(comp)

我想您可以使用列表理解。 虽然仍然每次迭代都创建一个新列表,但是您不必每次都删除一个项目:

l = [1,2,3,4]
for i in l:
    temp = [item for item in l if item != i]
    print temp

[2, 3, 4]
[1, 3, 4]
[1, 2, 4]
[1, 2, 3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM