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]
有两点需要解决
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)被删除。非常感谢。解决方案简洁而优雅。