【问题标题】:I want to write a function that returns True if all items in a list are equal [duplicate]如果列表中的所有项目都相等,我想编写一个返回 True 的函数[重复]
【发布时间】:2020-01-08 20:01:31
【问题描述】:

我想评估列表中的所有项目(项目将是整数,值从 1 到 16)并且如果所有项目都相同,无论它们的值如何,我希望函数返回 true。

这是我写的函数:

int_positions = [1,1,1,1] - 这会返回 true
int_positions = [2,2,2,2] 这会返回 false,尽管它应该返回 true,因为所有项目都是相同的

reduce(lambda a,b: a==b, int_positions)  

>>> var2 = [2,2,2,2]  
>>> reduce(lambda a,b: a==b,var2)  
False

【问题讨论】:

  • 一定要用lambda吗?
  • 是的,这将是一个只能使用一次的函数。所以我认为使用 lambda 函数会有意义
  • 在性能方面,我认为另一篇文章中的this answer是最好的。

标签: python python-3.x reduce


【解决方案1】:

您可以使用以下内容:

>>> item = int_positions[0]
>>> all(e == item for item in int_positions)

基本上,您所做的是获取第一个项目,然后使用 all 函数将该值与项目中的每个元素进行比较。如果可迭代对象的所有元素都为真(或可迭代对象为空),则此函数返回 True

【讨论】:

  • 这样更好: def allsame (seq): i = iter(seq); e = i.next(); return (all(x==e for x in i)
【解决方案2】:

您可以将整数列表转换为集合并检查集合的长度是否为1:

def is_same(lst):
    return len(set(lst)) == 1

【讨论】:

    【解决方案3】:

    这是另一种方法:

    result = int_positions == [int_positions[0]] * len(int_positions)
    

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多