首页 > 解决方案 > 删除列表中与其他列表中的匹配项相对应的每个项目

问题描述

我展示了许多此类案例中的两个案例来解释问题。每个案例都有两个列表。第一个列表 ienu包含元素 ID ,它必须与第二个列表 ie 中每个元组的第一个元素匹配nu_ew。如果找到匹配项,我想从第二个列表中删除每次出现的具有相同 ID 的元组,即nu_ew.

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

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

情况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)`

标签: pythonpython-3.x

解决方案


我会在这里使用列表理解:类似

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]

推荐阅读