4

我有一组输入条件,我需要根据这两个输入进行比较并产生第三个值。3 元素元组的列表似乎是一个合理的选择。我可以使用一些帮助的地方是构建一个紧凑的方法来处理它。我已经列出了我正在考虑使用的结构,如下所示:

input1 (string) 与第一个元素进行比较, input2 (string) 与第二个元素进行比较,如果它们匹配,则返回第三个元素

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

3 回答 3

7

创建一个字典,字典可以将元组作为键并将第三项存储为它的值。

使用 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)方法,对于 every input1input2您必须遍历整个元组列表(在最坏的情况下)。

于 2013-06-18T16:57:00.393 回答
2

可以使用带有 2 元组的 dict 作为键,并将其值作为您的字符串/任何内容,然后您可以保持外观仅包含有效值,并且如果您愿意,可以使用默认值无效...(通过使用dict.get

因此,如果您有一个 列表refs,则可以将它们转换为 adict并执行如下查找:

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!
于 2013-06-18T16:57:14.883 回答
0
def checkIfSame(t):
    if t[0] == t[1]:
        return t[2]

我很确定这对你有用。

于 2013-06-18T16:57:40.297 回答