【问题标题】:Another Python question about any()/all()关于 any()/all() 的另一个 Python 问题
【发布时间】:2021-03-11 07:42:34
【问题描述】:

假设我有一个列表,其中仅包含任何顺序的 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, True] or [True, False] or [False, False]” . IOW,您需要能够在给定任意长度的列表的情况下描述您感兴趣的状态。
  • 这只是一个布尔值列表。
  • @kbr85,有多少布尔值。可以是[True, True, True, False, True, False, False, True, True] 吗?如果有,结果如何?
  • 在获得了足够的声望点之后,我们都应该关注的一件事是写出不那么模棱两可的好问题。请把问题说清楚,以便每个人都可以查看并提供解决方案。

标签: python python-3.x boolean-logic iterable


【解决方案1】:

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

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

【讨论】:

  • 列表可以有任意数量的元素。长度不固定。
  • @juanpa.arrivillaga 我也意识到了这一点,并编辑了这个问题。但是谢谢:)
  • @kbr85:你说它只能有 3 种可能的状态,每种状态正好有 2 个元素。
  • @kbr85 那么您要评估的具体情况是什么?
  • 这个if sum(listState) == 1 也可能是[False,True] 的结果,但要求是[True,False]。所以只有if listState == '[True, False] 才有意义。
【解决方案2】:

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

您可以创建一个 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.

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

【讨论】:

  • 也可以表示[False, True]
  • 我知道,我认为这就是 OP 想要的。我将其修改为更具体。
  • 我知道。在问题足够清晰之前,我将其标记为关闭。
猜你喜欢
  • 2021-04-09
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多