如何检查列表中的所有元素是否相同?

7 投票
2 回答
12451 浏览
提问于 2025-04-17 21:14

如果我有这个列表:

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

我该怎么做才能让它读取这个列表,并告诉我这些项是否都是一样的呢?

我知道在这个例子中,判断它们是否都一样很简单。不过我还有更大的列表想让它帮我检查。

我应该用这个方法吗:

min(...)

如果是的话,我该怎么输入每个列表项呢?

2 个回答

14

使用all生成器表达式

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

另一种方法:

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

注意 第一个方法一旦发现列表中有不同的项就会停止,而另一种方法则不会。

19

你可以这样使用集合

len(set(mylist)) == 1

解释

集合只存储独一无二的项目。所以,我们尝试把列表转换成集合。转换后,如果集合里有超过一个元素,那就说明列表里的元素并不全是一样的。

注意:如果列表里有不能被哈希的项目(比如列表、自定义类等),就不能使用set方法。不过我们可以使用@falsetru建议的第一种方法,

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

优点:

  1. 它甚至可以处理不能被哈希的类型

  2. 它不会在内存中创建另一个临时对象。

  3. 一旦遇到第一个不匹配的情况就会停止。如果第一个和第二个元素不相同,它会立即返回False,而使用set方法时,所有元素都得比较。所以,如果列表很大,建议使用all方法。

  4. 即使列表是空的,它也能正常工作。如果可迭代对象里没有元素,all会返回True。但空列表会创建一个长度为0的空set

撰写回答