首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:确定列表中的所有项是否都是相同的项

Python:确定列表中的所有项是否都是相同的项
EN

Stack Overflow用户
提问于 2010-09-24 22:14:55
回答 4查看 111.1K关注 0票数 82

在我的一些代码中,我将一系列对象放在一个列表中,并根据它们的属性构建一个额外的列表,这是一个字符串。我需要确定这第二个列表中的所有项是否都具有完全相同的值,而不需要事先知道它是哪个值,并返回一个布尔值,以便我可以根据结果在代码中执行不同的操作。

我不能预先知道属性的名称,这就是为什么我试图使一些东西尽可能通用。

为了使示例更清楚,一个名为"all_same“的理想函数的工作原理如下:

代码语言:javascript
复制
>>> property_list = ["one", "one", "one"]
>>> all_same(property_list)
True
>>> property_list = ["one", "one", "two"]
>>> all_same(property_list)
False

我在考虑创建一个唯一元素的列表,然后检查它的长度是否为1,但我不确定这是否是最优雅的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2010-09-24 22:17:57

你可以欺骗和使用set

代码语言:javascript
复制
def all_same( items ):
    return len( set( items ) ) == 1 #== len( items )

或者你可以使用:

代码语言:javascript
复制
def all_same( items ):
    return all( map(lambda x: x == items[0], items ) )

或者,如果您处理的是可迭代对象而不是列表:

代码语言:javascript
复制
def all_same( iterable ):
    it_copy = tee( iterable, 1 )
    return len( set( it_copy) ) == 1
票数 56
EN

Stack Overflow用户

发布于 2010-09-25 00:19:03

这对序列和迭代器都有效:

代码语言:javascript
复制
def all_same(items):
  it = iter(items)
  first = next(it, None)
  return all(x == first for x in it)
票数 5
EN

Stack Overflow用户

发布于 2013-05-29 16:53:05

如果您知道值在列表中,这可能会更快。

代码语言:javascript
复制
def all_same(values):
    return values.count(values[0]) == len(values)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3787908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档