Python 删除列表中与其他列表中的匹配项相对应的每个项目

Python 删除列表中与其他列表中的匹配项相对应的每个项目,python,python-3.x,Python,Python 3.x,我展示了许多此类案例中的两个案例来解释这个问题。每种情况 有两个列表。第一个列表即nu包含元素ID,必须与第二个列表即nu\u ew中每个元组的第一个元素匹配。 如果找到匹配项,我想从第二个列表(即nu\u ew)中删除所有出现的具有相同ID的元组 问题是,我能够成功地删除案例2中的所有所需元素(元组),但在案例1中,元素(元组)的最后一次出现,即('Na23',0.0078838)对应于nu中的最后一个ID,仍然未删除 我正在寻找任何方法来获得想要的结果。非常感谢您的任何建议 案例1: nu=

我展示了许多此类案例中的两个案例来解释这个问题。每种情况 有两个列表。第一个列表即
nu
包含元素ID,必须与第二个列表即
nu\u ew
中每个元组的第一个元素匹配。 如果找到匹配项,我想从第二个列表(即
nu\u ew
)中删除所有出现的具有相同ID的元组

问题是,我能够成功地删除案例2中的所有所需元素(元组),但在案例1中,元素(元组)的最后一次出现,即
('Na23',0.0078838)
对应于
nu
中的最后一个ID,仍然未删除

我正在寻找任何方法来获得想要的结果。非常感谢您的任何建议

案例1:

nu=['F19','U234','U235','U238','Cl35','Cl37','Na23']

nu_ew = [('Mg24', 0.070385),    ('Mg25', 0.0092824), 
         ('Mg26', 0.0106276),   ('F19', 0.42348), 
         ('U234', 1.083506277), ('U235', 0.0014516), 
         ('U238', 0.202605),    ('Cl35', 0.0454252), 
         ('Cl37', 0.0153641),   ('Na23', 0.047303), 
         ('F19', 0.0521210),    ('U234', 3.61168759), 
         ('U235', 0.000483890), ('U238', 0.067535), 
         ('F19', 0.0217170),    ('Na23', 0.0078838), 
         ('Cl35', 0.0181700),   ('Cl37', 0.0061456)]
案例2:

nu=['F19','U234','U235','U238']

nu_ew = [('Mg24', 0.068893),   ('Mg25', 0.009085), 
         ('Mg26', 0.0104025),   ('F19', 0.414511), 
         ('U234', 1.060551431), ('U235', 0.0014209), 
         ('U238', 0.198313),    ('Cl35', 0.0444628), 
         ('Cl37', 0.0150386),   ('Na23', 0.046301), 
         ('F19', 0.0510167),    ('U234', 5.65627430), 
         ('U235', 0.00075782),  ('U238', 0.105767), 
         ('F19', 0.034011)]
我试着做:

for n in nu:
    for ind, id_wf in enumerate(nu_ew):
        if n == id_wf[0]:
            del nu_ew[ind]`

print(nu_ew)`

我只想在这里使用列表理解: 差不多

result = [t for t in nu_ew if t[0] not in nu]
对于较大的列表

nu_as_set = set(nu)
result = [t for t in nu_ew if t[0] not in nu_as_set]
有两点需要解决

  • 在对列表进行迭代时,不要将元素删除/添加到列表中。相反,创建一个包含结果的新列表。这可以通过for循环或列表理解来完成

  • 您不必迭代
    nu
    ,只需在
    中使用
    。如果<代码> NU 会更大,考虑使用SET,因为运算符在<>代码中占用的时间更少。

  • 因此,以下任一项都适用于第二个代码

  • 对循环使用
  • result=[]
    对于nu_ew中的id_wf:
    如果nu中的id\u wf[0]:
    结果.追加(id\U wf)
    nu_ew=结果
    打印(nu_ew)
    
  • 使用列表理解
  • nu\u ew=[id\u wf在nu\u ew中如果id\u wf[0]在nu\u ew中]
    

    设置
    nu
    很简单,只需添加

    nu=set(nu)
    

    nu\u set=set(nu)
    
    (如果要保留原始列表)


    事先。

    您的代码正在运行吗?案例1中的
    ('Cl35',0.0181700)
    是否被删除?@Yugandhar Chaudhari:是的,发布的代码正在运行。@Mad Physician:是的,('Cl35',0.0181700)被删除。非常感谢。解决方案简洁而优雅。