正确使用list.remove()

时间:2016-10-27 08:51:45

标签: python

我有一个包含某些对象的列表。列表中的每个对象都有许多属性,例如名称,坐标和其他一些属性。

>>> atom_list
[N, H, CA, HA, CB, HB, CG2, HG21, HG22, HG23, CG1, HG11, HG12, HG13, HD11, HD13, C, O]

我想从列表中删除没有特定名称的对象。此命令可用于识别它们,并且它可以正常工作。

>>> for atom in atom_list:
...    if atom.get_name() not in ['N', 'H', 'CA', 'HA', 'CB', 'HB', 'CG1', 'HG11', 'HG12', 'HG13', 'CG2', 'HG21', 'HG22', 'HG23', 'C', 'O']:
...         print atom
CD1
HD11
HD12
HD13

此命令是等效的。

>>> for atom in atom_list:
...    if atom.get_name() in ['CD1', 'HD11', 'HD12', 'HD13']:
...         print atom
CD1
HD11
HD12
HD13

但是,我不认为我真的理解list.remove()的用法,因为结果真的很奇怪。

>>> for atom in atom_list:
...     if atom.get_name() in ['N', 'H', 'CA', 'HA', 'CB', 'HB', 'CG1', 'HG11', 'HG12', 'HG13', 'CG2', 'HG21', 'HG22', 'HG23', 'C', 'O']:
...             atom_list.remove(atom)
... 
>>> atom_list
[N, H, CA, HA, CB, HB, CG2, HG21, HG22, HG23, CG1, HG11, HG12, HG13, HD11, HD13, C, O]

无论是否使用'不在此列表中的原子名'和'在此列表中使用原子名'命令来识别它们,都会发生这种情况。删除语句只能删除CD1和HD12,即使它也匹配HD11和HD13。我正在使用list.remove()命令做错了。准确的说法是什么?为什么它与正确的匹配?

0 个答案:

没有答案