2013-11-09 90 views
0

我有一個5元素列表,我想知道是否有2或3個相同的元素(或兩個相等和三個相等)。這個「檢查」將是條件的一部分。比方說,我懶得和愚蠢來寫:檢查在列表/元組等中是否有2個或3個具有相同值的元素。

if (a==b and c==d and c==e) or .......... or ......... 

我知道這可能是這樣寫的,但不完全是如何:

if (a==b and (c==b and (c==e or .... 

我該怎麼辦呢?我也知道你可以寫下類似的東西:

if (x,y for x in [5element list] for y in [5element list] x==y, x not y: 

回答

1

如果您只是想檢查多個出現並且對象是可哈希類型,則以下解決方案可以爲您工作。

你可以創建你的對象列表

>>>l = [a, b, c, d, e] 

然後,您可以創建從同一列表的一組和比較列表的長度和集的長度。如果該集合中的元素少於列表中的元素,則知道必須有多個事件。

>>>if (len(set(l)) < len(l)): 
    ... 
1

使用count。你只需要[i for i in myList if myList.count(i) > 1]。這個列表包含重複的元素,如果它是非空的,你有重複的元素。

編輯:SQL!= python,刪除了'where',這對於更大的列表來說也會變慢,但對於5個元素它可以。

+0

'where'不是一個Python關鍵字 – Tim

+0

當你發佈你的評論時,我已經在編輯了,但是謝謝。 – willy

+1

好吧,如果你在結果列表中有兩個項目,但是你可以有兩個然後一個獨特的項目。我可能會在這種情況下建立一個計數字典,就像'{我:myList.count(我)爲我在集合(myList)}' – willy

0

您可以使用collections.Counter來計算列表中每個元素的出現次數。 計算完畢後,只需檢查您想要的值(2或3)是否在計數中。

from collections import Counter 
my_data = ['a', 'b', 'a', 'c', 'd'] 
c=Counter(my_data) 
counts = set(c.values()) 
print 2 in counts or 3 in counts 
相關問題