Python多变量if条件

3

我是一名编程新手,想在Python中询问一个问题:如果我有一个包含多个条件的列表m-list,并且想知道这些条件中是否有n个为真,则如何在if语句中实现:

例如:

if (a == b) or (c == d) or (e == f):

会返回1、2或全部3个值为真,但我想知道是否只有其中2个是真的。

例如:

if ((a == b) and ((c == d) or (e == f))) or (((a == b) or (c == d)) and (e == f)) or (((a == b) or (e == f)) and (c == d)):

有没有更简单的方法来完成这个任务?如果(m,n)很大怎么办?

谢谢


除了笨重之外,你的解决方案还不能给出正确的答案。如果所有三个条件都为真,它也会返回“True”... - Tim Pietzcker
4个回答

6
[a == b, c == d, e == f].count(True)

4

因为True实际上是整数1,所以你可以这样做:

if (a==b) + (c==d) + (e==f) == 2:

对于更大的条件集,你可以使用sum()

conditions = [a==b, c==d, d==e, f==g, ...]
if sum(conditions) == 3:
    # do something

2

如果条件是保证返回True或False的相等性测试,那么你当然可以使用@Tim的答案。

否则,你可以使用一个条件列表来解决稍微有点变化的问题,这将适用于任何条件语句。

conditions = [a == b, 
    c == d,
    e == f,
    e,
    f is None]

然后使用以下简单的求和公式:

sum(1 if cond else 0 for cond in conditions) >= m

请注意,如果条件也是布尔值,则此方法有效。

0
n = 0
for cond in list:
  n += bool(cond)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接