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

Zac*_*tes 6 python list python-2.7

如果我有这个清单;

mylist = ['n', 'n', '4', '3', 'w']
Run Code Online (Sandbox Code Playgroud)

如何让它阅读列表,并告诉我它们是否都是一样的?

我知道在这个例子中很容易说出它们并不完全相同.我有更大的列表,我希望它能为我阅读.

我会用这个来解决这个问题:

min(...)
Run Code Online (Sandbox Code Playgroud)

如果是这样,我将如何输入每个列表项?

the*_*eye 16

你可以像这样使用set

len(set(mylist)) == 1
Run Code Online (Sandbox Code Playgroud)

说明

集合中只存储唯一的项目.因此,我们尝试将列表转换为集合.转换后,如果集合中包含多个元素,则表示并非列表中的所有元素都相同.

注意:如果列表具有不可用项(如列表,自定义类等),set则无法使用该方法.但我们可以使用@falsetru建议的第一种方法,

all(x == mylist[0] for x in mylist)
Run Code Online (Sandbox Code Playgroud)

好处:

  1. 它甚至适用于不可用的类型

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

  3. 它在第一次故障后短路.如果第一个和第二个元素不匹配,则False立即返回,而在该set方法中,必须比较所有元素.所以,如果列表很大,你应该更喜欢这种all方法.

  4. 即使列表实际为空,它也能工作.如果iterable中没有元素,all则返回True.但是空列表将创建一个空set,其长度为0.

  • 请注意,这仅适用于可散列项目.例如,在列表列表上执行此操作将不起作用. (5认同)
  • 提防边缘情况,例如`mylist = [float('nan')]` (2认同)

fal*_*tru 12

使用all生成器表达式:

all(x == mylist[0] for x in mylist)
Run Code Online (Sandbox Code Playgroud)

替代方案:

mylist.count(mylist[0]) == len(mylist)
Run Code Online (Sandbox Code Playgroud)

注意一旦发现列表中有任何不同的项目,第一个将停止,而替代品则不会.