2014-03-07 212 views
6

如果我有這個列表;如何檢查列表中的所有元素是否相同?

mylist = ['n', 'n', '4', '3', 'w'] 

我如何得到它來讀取列表,並告訴我,他們是否都一樣?

我知道,在這個例子中很容易判斷它們並不完全相同。我有更大的列表,我希望它爲我閱讀。

我會去這個使用:

min(...) 

如果是的話,我將如何輸入每個列表項?

回答

13

您可以使用這樣設置

len(set(mylist)) == 1 

說明

臺店在他們唯一的唯一項目。所以,我們嘗試將列表轉換爲一個集合。轉換後,如果集合中有多個元素,則表示並非列表中的所有元素都是相同的。

注意:如果列表中有不可更新的項目(如列表,自定義類等),則不能使用set方法。但是,我們可以使用@falsetru建議第一種方法,

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

優點:

  1. 它甚至與unhashable類型

  2. 它不會在創建另一個臨時對象的工作原理記憶。

  3. 第一次故障後短路。如果第一個和第二個元素不匹配,則立即返回False,而在set方法中,必須對所有元素進行比較。所以,如果名單很大,你應該更喜歡all方法。

  4. 即使列表實際上是空的,它也可以工作。如果迭代中沒有元素,all將返回True。但空單將創建一個空set對於其長度爲0。

+1

這真的很聰明 – Tyler

+0

希望我的心靈可以像這樣工作:P – Gogo

+3

請注意,這隻適用於可排列的物品。在清單列表中執行此操作將不起作用。 –

6

使用allgenerator expression

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

備選:

mylist.count(mylist[0]) == len(mylist) 

注意第一隻要發現列表中有任何不同的項目,就會停下來,而替代項目則不會。

+2

+1:爲早期停止 – tom10

+1

我發現後者'.count'更可靠一些。 +1爲建議一種替代方法! – 3kstc

相關問題