我有一个双元素元组t
,每个元素都是正整数或None
,组合可能是以下四种形式之一:
1:(x, y)
:例如(2,3)
2:(x, x)
:例如(1,1)
3:(x, None)
(或等效地,(None, x)
):例如(3,无)或(无,5)
4:(None, None)
我的应用程序逻辑希望将2)和3)视为一种情况,1)作为第二种情况,以及4)作为第三种情况。
我想在给定元组上找到一个操作,以便更容易/更有效地区分这三种情况。例如,t[0] or t[1]
将帮助我们区分2)和3)的情况以及4)的情况,但它无法区分2)和3)与1)。
最后,我想尽量减少所需的if
次检查次数。
答案 0 :(得分:1)
这应该做:
if t[0] or t[1]:
if t[0] == t[1] or not (t[0] and t[1]):
# 2-3rd case
else:
# 1st case
else:
# 4th case
答案 1 :(得分:0)
如果没有if语句,就可以这样做,就像这个恐怖代码那样:
def check(t):
[
lambda x: print(x, "match case 4"),
None,
lambda x: print(x, "match case 2 or 3"),
lambda x: print(x, "match case 1")
][sum((bool(t[0]), bool(t[1]), t[0] != t[1]))](t)
解决方案的关键是sum((bool(t[0]), bool(t[1]), t[0] != t[1]))
,这是有效的,因为,
(x, y)
通过所有检查,
(x, x)
通过两次检查(bool(t[0])
和bool(t[1])
),
(None, x)
也传入了两个(bool(t[1])
和t[0] != t[1]
)和
(None, None)
没有人传递