4

このようなイーグルという名前のタプルのリストがあります

eagles= [("NCMS000","NCMS000"),("NCFP000","NCFP000"),("NCMS00D","NCMS00D"),("NCCS000","NCCS000"),("NCCP000","NCCP000"),("NCMN000","NCMN000"),("NCFN000","NCFN000"),("NP000G0","NP000G0"),("NP000G0","NP000G0"),...

そして、次のような Result という名前のリスト:

['"', '"', 'Fe', '1']
['Hola', 'hola', 'I', '1']
['como', 'como', 'CS', '0.999289']
['estas', 'este', 'DD0FP0', '0.97043']
['Bien', 'bien', 'NP00000', '1']
['gracias', 'gracia', 'NCFP000', '1']
['y', 'y', 'CC', '0.999962']
['tu', 'tu', 'DP2CSS', '1']
['yo', 'yo', 'PP1CSN00', '1']
['estoy', 'estar', 'VAIP1S0', '1']
['bien', 'bien', 'RG', '0.902728']
['huevo', 'huevo', 'NCMS000', '0.916667']
['calcio', 'calcio', 'NCMS000', '1']
['leche', 'leche', 'NCFS000', '1']
['proteina', 'proteina', 'NCFS000', '1']
['Francisco', 'francisco', 'NP00000', '1']
['1999', '1999', 'Z', '1']
['"', '"', 'Fe', '1']

結果リストの 3 番目の項目と eagles の 1 番目の項目を一種の連続ループで比較する関数を作成する必要があります。それらが一致する場合、4 つの要素を含むリストのリストを返す必要があります。

 r = [['leche', 'leche', 'NCFS000', '1'],['proteina', 'proteina', 'NCFS000', '1'],['Francisco', 'francisco', 'NP00000', '1']]

私がこれまでにやったこと:

def check(lst):
    return [x[2] for x in lst if (x[2] in y[0] for y in eagles)]

IndexError: list index out of range.

リストから3番目の要素を抽出して空の要素に入れることさえできません

e = [x[0] for x in eagles]
r = [item for item in e if item in Result]
rg =[]
for i in Result:
    rg = i[2]

同じエラー

私に何ができる?どんな提案でも大歓迎です。

4

3 に答える 3

4

まず、eaglesリストを辞書に変換した方が良いでしょう...

>>> eagles = [("NCMS000","NCMS000"), ("NCFP000","NCFP000"), ...]
>>> eagles_dict = dict(eagles)
>>> print eagles_dict
{'NCFP000': 'NCFP000', 'NCMS000': 'NCMS000', ...}

...ルックアップをよりシンプルかつ効率的にするため。次に、次のような単純なリスト内包表記を使用できます...

>>> result = [['"', '"', 'Fe', '1'], ['Hola', 'hola', 'I', '1'], ...]
>>> print [item for item in result if item[2] in eagles_dict]
[['leche', 'leche', 'NCFS000', '1'], ...]
于 2013-04-23T13:03:57.247 に答える
1

おそらく、ソートを含むより効率的なアルゴリズムがありますが、これを 1 回か 2 回実行するだけの場合は、次のようになります。

アイテムに常に 4 つの要素があるとは限らないという事実を考慮して更新されました。

eagles_first_parts = [eagle[0] for eagle in eagles]
r = [item for item in Result if len(item) > 2 and item[2] in eagles_first_parts]
于 2013-04-23T12:58:39.450 に答える
0

注意: 最も効率的なコードを書いているわけではありませんが、あなたの試みに基づいたものです。Result は次のようなリストリストであると想定しています。

Result=[['"', '"', 'Fe', '1'],['Hola', 'hola', 'I', '1'],
['como', 'como', 'CS', '0.999289'],
['estas', 'este', 'DD0FP0', '0.97043'],
['Bien', 'bien', 'NP00000', '1'],
['gracias', 'gracia', 'NCFP000', '1'],
['y', 'y', 'CC', '0.999962'],
['tu', 'tu', 'DP2CSS', '1'],
['yo', 'yo', 'PP1CSN00', '1'],
['estoy', 'estar', 'VAIP1S0', '1'],
['bien', 'bien', 'RG', '0.902728'],
['huevo', 'huevo', 'NCMS000', '0.916667'],
['calcio', 'calcio', 'NCMS000', '1'],
['leche', 'leche', 'NCFS000', '1'],
['proteina', 'proteina', 'NCFS000', '1'],
['Francisco', 'francisco', 'NP00000', '1'],
['1999', '1999', 'Z', '1'],
['"', '"', 'Fe', '1']]

今、あなたが去ったところから始めます。

e=[x[0] for x in eagles]

ここで、空のリスト r を初期化します

r=[]

for item in Result:
    for eagle in e:
       if item[2]==eagle:
            r.append(item)
print r

出力は次のとおりです。

[['gracias', 'gracia', 'NCFP000', '1'],
['huevo', 'huevo', 'NCMS000', '0.916667'],
['calcio', 'calcio', 'NCMS000', '1']]
于 2013-04-23T13:09:13.320 に答える