【问题标题】:boolean expression of a list列表的布尔表达式
【发布时间】:2015-01-21 07:42:32
【问题描述】:

当列表中的元素都相同时,我想返回True,我需要做什么 和False 当有一个元素不一样?

例如:

>>> f([3, 3, 3])
True  
>>> f([3, 3, 3, 2, 3, 3])
False

我试图创建一个for 循环:

for i in My_list: 
    if i = ?: 
        return False  
    else: 
        return True

但我不知道我需要在? 中写什么。

【问题讨论】:

  • 就个人而言,我会为列表中的第一个值设置一个变量,并在一个条件下检查所有其他元素,如果有任何不同则返回 False。然后有一个 return True 声明之外,如果 False 永远不会返回。

标签: python list count boolean


【解决方案1】:

Python 有一个set type,它只包含唯一的元素;只要您的列表元素始终是可散列的(ints 是),您就可以测试结果集的长度:

>>> def all_the_same(l):
    return len(set(l)) == 1

>>> all_the_same([3, 3, 3])
True
>>> all_the_same([3, 3, 3, 2, 3, 3])
False

如果all_the_same([]) 也应该返回True,则设为<= 1


请注意,要使用 for 循环执行此操作,如果 任何 元素不匹配,则为 False,如果 所有 元素匹配,则只有 True .所以看起来像:

def all_the_same(l):
    for x in l:
        if x != l[0]:
            return False
    else:
        return True

【讨论】:

    【解决方案2】:

    要么

    try:
        all(my_list[0] == elem for elem in my_list[1:])
    except IndexError:
        (Whatever you prefer)
    

    len(set(my_list)) == 1
    

    【讨论】:

    • 感谢火山!你的 len(set(my_list)) == 1 非常有用!
    【解决方案3】:

    有几种方法,IMO 最可爱的一种是:

    def f(lst):
        return lst[1:]==lst[:-1]
    

    这基本上检查列表是否保持不变,如果您将其旋转一倍,当且仅当所有元素都相等时,这是正确的:

    A B C D E F G
      A B C D E F G

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2010-09-21
      • 1970-01-01
      • 2023-03-23
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多