我有两个清单:
list_a = [1,5,8]
list_b = [12,4,2,5,7,5,3,6,8]
Run Code Online (Sandbox Code Playgroud)
元素list_a对应于元素的索引list_b.两个列表的大小都大于100.
如何删除list_b其索引所在的元素list_a,因此如果您获取上面的列表,结果列表是[12,2,5,7,3,6]?
两种选择:
使用列表推导创建新列表:
newlist = [el for i, el in enumerate(oldlist) if i not in indices_to_delete]
Run Code Online (Sandbox Code Playgroud)
如果indices_to_delete是这样的话会更快set:
indices_to_delete = set(indices_to_delete)
newlist = [el for i, el in enumerate(oldlist) if i not in indices_to_delete]
Run Code Online (Sandbox Code Playgroud)
因为集合中的成员资格测试是列表中的O(1)与O(n).
从列表中就地按反向排序顺序删除索引:
for index in sorted(indices_to_delete, reversed=True):
del oldlist[index]
Run Code Online (Sandbox Code Playgroud)
如果不按反向排序顺序删除项目,则具有较高索引的项目将被移除,因为具有较低索引的项目将被删除,而其余indices_to_delete项目不再与您需要删除的项目匹配.