如何检查列表中的所有元素是否相同?
如果我有这个列表:
mylist = ['n', 'n', '4', '3', 'w']
我该怎么做才能让它读取这个列表,并告诉我这些项是否都是一样的呢?
我知道在这个例子中,判断它们是否都一样很简单。不过我还有更大的列表想让它帮我检查。
我应该用这个方法吗:
min(...)
如果是的话,我该怎么输入每个列表项呢?
2 个回答
19
你可以这样使用集合
len(set(mylist)) == 1
解释
集合只存储独一无二的项目。所以,我们尝试把列表转换成集合。转换后,如果集合里有超过一个元素,那就说明列表里的元素并不全是一样的。
注意:如果列表里有不能被哈希的项目(比如列表、自定义类等),就不能使用set
方法。不过我们可以使用@falsetru建议的第一种方法,
all(x == mylist[0] for x in mylist)
优点:
它甚至可以处理不能被哈希的类型
它不会在内存中创建另一个临时对象。
一旦遇到第一个不匹配的情况就会停止。如果第一个和第二个元素不相同,它会立即返回
False
,而使用set
方法时,所有元素都得比较。所以,如果列表很大,建议使用all
方法。即使列表是空的,它也能正常工作。如果可迭代对象里没有元素,
all
会返回True
。但空列表会创建一个长度为0的空set
。