我正在展示许多这样的案例中的两个案例来解释这个问题。每个案例
有两个列表。第一个列表,即nu
包含元素ID,该ID必须与第二个列表中的每个元组的第一个元素,即nu_ew
匹配。
如果找到匹配项,我想从第二个列表(即nu_ew
)中删除每个具有相同ID的元组。
问题是我可以成功从案例2中删除所有想要的元素(元组),但是最后一次出现的元素(元组)即('Na23', 0.0078838)
与{ {1}}在情况1中保持不变。
我正在寻找任何获得期望结果的方法。任何建议都将不胜感激。
情况1:
nu
nu=['F19', 'U234', 'U235', 'U238', 'Cl35', 'Cl37', 'Na23']
情况2:
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)]
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)]
答案 0 :(得分:2)
我只在这里使用列表理解: 像
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]
答案 1 :(得分:0)
要指出两点。
在迭代列表时不要删除/添加元素到列表中。而是创建一个包含结果的新列表。这可以通过for循环或列表理解来完成。
您不必遍历nu
,只需使用in
。如果nu
会更大,请考虑使用集合,因为使用in
运算符会花费更少的时间。
因此,以下任何一种都可以用于第二个代码。
for
循环。result = []
for id_wf in nu_ew:
if id_wf[0] in nu:
result.append(id_wf)
nu_ew = result
print(nu_ew)
nu_ew = [id_wf in nu_ew if id_wf[0] in nu]
从nu
中取出一组很简单,只需添加
nu = set(nu)
或
nu_set = set(nu)
(如果要保留原始列表)
事先。