标题有点令人困惑,所以我将举一个例子。假设我有一组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
如果需要,我可以对每个案例进行硬编码。例如:
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...
我可以在每一个可能的情况下继续这样做。然而,这似乎效率极低,也不是蟒蛇式的。
最好的方法是什么?我应该硬编码吗?提前谢谢。
考虑到[A,B,C,D]
是binary
或booleans
,可以使用sum函数。
CCD_ 4 CCD_。
if sum([A,B,C,D])==2:
'do something'
尝试使用sum()
,这是有效的,因为True = 1
和False = 0
是True+True+False+False=1+1+0+0=2
,但一个问题是除了0/None之外的任何值都计算为True,所以如果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