4

2 つの入力に基づいて 3 番目の値を比較して生成する必要がある一連の入力条件があります。3 つの要素タプルのリストは、これには合理的な選択のようです。それを処理するためのコンパクトな方法を構築する際に、私が助けを借りることができます。次のように使用することを考えていた構造をレイアウトしました。

input1 (文字列) は最初の要素と比較し、input2 (文字列) は 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)
4

3 に答える 3

7

辞書を作成します。辞書はキーとしてタプルを持ち、3 番目の項目を値として格納できます。

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ます。

于 2013-06-18T16:57:00.393 に答える
2

2タプルをキーとしてdictを使用し、その値を文字列などとして使用すると、有効な値のみを含むように外観を維持し、必要に応じてデフォルト値を無効にすることができます...(を使用して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!
于 2013-06-18T16:57:14.883 に答える
0
def checkIfSame(t):
    if t[0] == t[1]:
        return t[2]

私はこれがあなたのために働くはずだと確信しています。

于 2013-06-18T16:57:40.297 に答える