如果我有这个列表:
如果是这样,我该如何输入每个列表项?
mylist = ['n', 'n', '4', '3', 'w']
如何让程序读取列表,并告诉我它们是否全部相同?
我知道在这个例子中很容易看出它们并不全相同。我有更大的列表需要让程序为我阅读。
我可以通过以下方式进行操作:
min(...)
如果是这样,我该如何输入每个列表项?
mylist = ['n', 'n', '4', '3', 'w']
如何让程序读取列表,并告诉我它们是否全部相同?
我知道在这个例子中很容易看出它们并不全相同。我有更大的列表需要让程序为我阅读。
我可以通过以下方式进行操作:
min(...)
您可以像这样使用set
len(set(mylist)) == 1
解释
集合只存储其中唯一的元素。因此,我们尝试将列表转换为一个集合。转换后,如果集合中有多个元素,则表示列表中不是所有元素都相同。
注意:如果列表中有不可哈希的项目(如列表、自定义类等),则无法使用set
方法。但我们可以使用@falsetru建议的第一种方法。
all(x == mylist[0] for x in mylist)
优点:
它甚至可以使用不可哈希类型。
它不会在内存中创建另一个临时对象。
在第一次失败后,它会短路。如果第一个和第二个元素不匹配,则立即返回False
,而在set
方法中,必须比较所有元素。因此,如果列表很大,您应该首选all
方法。
即使列表实际上为空,它也可以工作。如果可迭代对象中没有元素,则all
将返回True
。但是空列表将创建一个空的set
,其长度为0。
mylist.count
?真的吗?我以为那个替代方案是开玩笑加进来的。任何能提前结束的解决方案都比那些不管什么情况都要读完整个序列的方案好。或许可以在空列表的情况下增加保护,或者在你得到一个生成器时转换成迭代器。但是肯定有一些涉及 all
的方案才是正确的选择。 - PaulMcG
mylist = [float('nan')]
。 - wim