如何判断 Python 中一组 M 个条件中的 N 个条件是否为真?

How do I tell if exactly N conditions in a set of M conditions are true in Python?

标题有点乱,举个例子吧。假设我有一组 4 个条件 [A、B、C、D],其中每个条件可以为真或为假。例如,条件 A 可以说

A[i,j+1] == 0 

A[i,j+1] != 0

我想要一个 if 语句,本质上是这样的:

if (in [A,B,C,D], any 2 are true and any 2 are false):
    do something
else:
    do something else

如有必要,我可以 hard-code 每个个案。例如:

if ((A and B are true) and (C and D are false)) or  ((A and C are true) and (B and D are false)) or...

我可以继续处理所有可能的情况。然而,这似乎非常低效而且不是 pythonic。

执行此操作的最佳方法是什么?我应该 hard-code 吗?提前致谢。

考虑到 [A,B,C,D]binarybooleans,您可以使用求和函数。

True=1False=0总和

if sum([A,B,C,D])==2:
    'do something'

尝试使用 sum(),这是可行的,因为 True = 1False = 0 所以 True+True+False+False=1+1+0+0=2,但一个问题是除 0/None 之外的任何值计算为是的,所以如果 A、B、C、D 中的某些东西是 -1 或其他,它将失败;-(

if sum([A,B,C,D]) == 2:
    # 2 False, 2 True

有点短但不怪异的方式:

if A+B+C+D == 2:
    # 2 False, 2 True