2014-03-07 166 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

相关问题