Python 将元组元素与列表元素匹配
我有一个名为eagles的元组列表,如下所示Python 将元组元素与列表元素匹配,python,Python,我有一个名为eagles的元组列表,如下所示 eagles= [("NCMS000","NCMS000"),("NCFP000","NCFP000"),("NCMS00D","NCMS00D"),("NCCS000","NCCS000"),("NCCP000","NCCP000"),("NCMN000","NCMN000"),("NCFN000","NCFN000"),("NP000G0","NP000G0"),("NP000G0","NP000G0"),... 以及一个名为Result的列表
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']
我需要创建一个函数,将结果列表的第三项与eagles的第一项进行连续循环比较。如果它们匹配,我需要返回包含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.
我甚至无法从列表中提取第三个元素并将其放在一个空元素上
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个元素
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]
首先,最好将
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'], ...]
注意:不是写最有效的代码,而是从你的尝试中得到的东西。 我假设结果是一个由列表组成的列表,如:
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']]
回溯(最近一次调用):文件“C:\Users\JP\Desktop\TT\PLN\programa\u vsm\prueba\u ext\u eagles.py”,第21行,if item[2]==eagle:Indexer:列表索引超出范围您的数据可能不正确。如果条目[2]==eagle,尝试在行周围放置Try/except,如果遇到异常,则打印出有问题的条目;它将帮助您确定您是否存在数据问题或代码问题。我有python 2.7.3 32位winI感谢您的评论由于y all,问题得以解决。最后我使用了一个字典,但无法将其附加到所有Pace thks 4 ur响应的列表1中!但是我用ur运行了代码,并一直说:在r2=[item for item in e if item[2]in eagles_first_parts]indexer中:字符串索引超出范围我有python 2.7.3 32位winI已经更新了尝试修复错误的方法。似乎不是你的结果列表中的每个列表都有你给出的例子那样的4个元素。我很感激你的评论。多亏了y,问题才得以解决。最后我用了一本字典,但无法将它附加到列表中。查看你所有的答案和回答,我认为你的数据不好;我猜是[2]访问多个答案。我很感谢你的评论。多亏了你,问题才得以解决。最后我使用了一本词典,但无法将其附加到列表中