2015-04-28 35 views
1

我有兩個元素的元組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

您是否必須區分'0'和'None'? – orlp

+0

@orlp,0不是可能的值,因爲「*每個元素是一個正整數或」無「*」 – MLister

回答

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 
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)通過沒有人

相關問題