python多个变量if condition

时间:2015-03-27 10:29:55

标签: python combinatorics

我是编程的新手,想在Python中询问我是否有一个m-list的条件,并且想知道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)很大,该怎么办?

由于

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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 :(得分: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

请注意,如果条件本质上是布尔值,则此方法也适用。

答案 3 :(得分:0)

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