我有一组输入条件需要比较,并根据两个输入产生第三个值。 3元素元组的列表似乎是一个合理的选择。在哪里我可以使用一些帮助是建立一个紧凑的方法来处理它。我已经按照以下方式列出了我想要使用的结构:
input1(string)与第一个元素比较,input2(string)与第二个元素比较,如果匹配,则返回第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)
答案 0 :(得分:6)
创建一个dict,dicts可以将元组作为键,并将第三个项目存储为它的值。
使用dict会为任何一对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)
方法,对于每个input1
,input2
,您必须循环遍历整个元组列表(在最坏的情况下) )。
答案 1 :(得分:2)
可以使用带有2元组的dict作为键,并将其值作为字符串/其他,然后您可以保持外观仅包含有效值,并且如果您希望,则默认值为invalid ...(使用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!
答案 2 :(得分:0)
def checkIfSame(t):
if t[0] == t[1]:
return t[2]
我很确定这对你有用。