2013-06-18 193 views
4

我有一組輸入條件需要比較,並根據兩個輸入生成第三個值。一個3元素元組的列表看起來像是一個合理的選擇。在哪裏我可以使用一些幫助是建立一個緊湊的方法來處理它。我已經奠定了我在考慮使用如下的結構:Python:匹配元組中的兩個元素,返回第三個

輸入1(串)進行比較,第一個元素,輸入2(串)比較第二個元素,它們是否匹配,返回3元

('1','a', string1) 
('1','b', string2) 
('1','c', string3) 
('1','d', string3) 
('2','a', invalid) 
('2','b', invalid) 
('2','c', string3) 
('2','d', string3) 

回答

6

創建一個字典,字典可以將元組作爲關鍵字,並將第三個項目存儲爲值。

使用字典將提供一個O(1)查找任何對(input1,input2)

dic = {('1','a'): string1, ('1','b'):string2, ('1','c'): string3....} 

if (input1,input2) in dic: 
    return dic[input1,input2] 
else: 
    #do something else 

在這種情況下,使用一個元組列表將是一個O(N)方法,爲每input1input2您通過元組的整個列表已經循環(在最壞的情況下)。

+0

不錯的解決方案:) – Krab

+0

完美!非常感謝你! – downbySF

+0

啊!只是充滿有用的信息:)再次感謝Ashwini! – downbySF

2

可以使用一個2元組作爲鍵的字典,它的值作爲你的字符串/任何,然後你可以保持外觀只包含有效值,並且如果你願意,默認值爲無效。 (通過使用dict.get

所以,如果你有一個refs列表,然後你可以將它們轉換成dict和執行查找這樣:

refs = [ 
    ('1','a', 'string1'), 
    ('1','b', 'string2'), 
    ('1','c', 'string3'), 
    ('1','d', 'string3'), 
    ('2','a', 'invalid'), 
    ('2','b', 'invalid'), 
    ('2','c', 'string3'), 
    ('2','d', 'string3') 
] 

lookup = {ref[:2]:ref[2] for ref in refs} 

print lookup['1', 'd'] 
#string3 
print lookup.get(('I do not', 'exist'), 'uh oh, in trouble now!') 
# uh oh, in trouble now! 
0
def checkIfSame(t): 
    if t[0] == t[1]: 
     return t[2] 

我敢肯定這應該工作爲你。

相關問題