2012-10-29 180 views
-1

可能重複:
check if all elements in a list are identical如何檢查列表中的每個元素是否相等?

我要檢查所有列表的元素是相等的。我不能這樣做:

if all (x == x for x in (a, b, c, d)): 
    ... 

是否有非常簡約和優雅的方式來在Python中做到這一點?

+6

http://stackoverflow.com/questions/3844801/check-if-all-elements-in-a-list-are-identical –

+1

你不只是比較每個元素在這裏嗎?一個元素何時不等於自身? –

+0

@FelixKling:'float('nan')' – Eric

回答

2

如果您的列表中只有可哈希元素,則可以使用set

例如,如果您的列表名爲lst你可以這樣做:

if (len(set(lst)) <= 1): 
    .... 

裝置會消除你的列表中的所有副本,因此,如果集的長度爲這意味着所有的元素是相同的。

+1

如果列表中的項目不可散列,這將失敗。 –

+0

的確,我不知道爲什麼,但我認爲他會比較數字,我會編輯答案。謝謝 –

0
first = my_list[0] 
print all(x==first for x in my_list[1:]) 

應該工作

更優雅,也許...(我真的不這麼認爲...)

>>> if reduce(lambda item0,item1:item0 if item0==item1 else False,my_list) is not False: 
... print "OK ALL THE SAME!" 
... 
OK ALL THE SAME! 
+0

你能解釋一下這是如何工作的嗎? –

+0

reduce將一個函數應用到列表中的每一對元素,直到只剩下一個標量值.. bah減少沒有工作...生病看看我能否得到一個版本與減少工作 –

+0

失敗'[False, False]' – Eric

0
all(x == items[0] for x in items) 

這是你在找什麼。

否則,您會比較每個值到自己x==x而不是每個值到第一個值。

-1

回答here,與業績比較基準

我最喜歡的:lst[1:] == lst[:-1]

+0

然後請投票關閉/舉報此問題爲重複,並且不要複製答案。 –

相關問題