2013-06-18 182 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] 

我敢肯定这应该工作为你。

相关问题