在元组中有效区分不同的可能组合

时间:2015-04-28 23:44:13

标签: python python-3.x if-statement

我有一个双元素元组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次检查次数。

2 个答案:

答案 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)没有人传递