如何判断 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]
是 binary
或 booleans
,您可以使用求和函数。
True=1
False=0
总和
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 之外的任何值计算为是的,所以如果 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
标题有点乱,举个例子吧。假设我有一组 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]
是 binary
或 booleans
,您可以使用求和函数。
True=1
False=0
总和
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 之外的任何值计算为是的,所以如果 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