2015-06-20 47 views
1

好日子,我GOOGLE了這個問題,並已找到類似的答案,但不是我在找什麼。我不確定是什麼問題,所以我沒有幫助我,我正在尋找一個優雅的解決方案。比較我與其他項目在Python列表

如何遍歷列表中的項目,並將其與列表中的所有其他項目進行比較。例如,如果我有一個列表

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]

一種解決方案我一直在玩涉及d在每次迭代中重複列表,找到該項目的索引,從重複列表中刪除它並比較兩者。這條路線似乎不太理想,因爲您必須在每次迭代中創建一個新列表。

回答

1

我想你可以使用列表理解。雖然每次迭代仍然創建一個新列表,但不需要每次都刪除一個項目:

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] 
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))] 
2

一個簡單的方法是使用兩個循環:

arr = [1,2,3,4] 

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