关于 any()/all() 的另一个 Python 个问题

Another Python question about any()/all()

假设我有一个只包含 True/False 个值的列表,并且列表的长度不固定。让我们调用列表 myList.

那么,就有三种可能。该列表仅包含 True 值,该列表仅包含 False 值或该列表包含任意顺序的 True/False 个值的混合。

如果我这样做:

if all(myList):
    print('All True')
elif any(myList):
    print('Mixed values')
else:
    print('All False')

我可以知道列表的大致内容,全部为True,全部为False或混合True/False个值。

问题是:有没有办法在不进行 if elif else 测试的情况下知道列表是否包含混合的 True/False 值?是否有任何内置函数可以直接知道我在列表中有混合值?

您的代码基本上迭代列表两次,但一次就足够了:

if 0 < sum(myList) < len(myList):
    print('Mixed values')

The question is: Is there a way to know if the list contains mixed True/False values without the if elif else test? Any built-in function to directly know I have mixed values in the list?

您可以创建一个 lambda 来执行此操作。

mixed = lambda x: len(set(x)) > 1
tf = [True, False, False, True]
f = [False, False, False]
t = [True, True, True]

mixed(tf) # returns true
mixed(t)  # returns false
mixed(f)  # returns false.

请注意,以上内容适用于任何列表,因为它仅在删除重复项后检查任何集合的长度。但我假设您不会让杂散值进入您的布尔值列表。