如果您绝对必须从原始列表中删除项目,并且您没有足够的内存来进行复制,请使用以下替代方法:自己将这些项目移到列表中:
def walk_list(list_of_g):
to_idx = 0
for g_current in list_of_g:
if not subtle_condition(g_current):
list_of_g[to_idx] = g_current
to_idx += 1
del list_of_g[to_idx:]
这将使每个项目(实际上是指向每个项目的指针)仅移动一次,因此O(N)也将移动一次。函数末尾的del语句将删除列表末尾的所有不需要的项目,我认为Python足够智能,可以在不为列表的新副本分配内存的情况下调整列表的大小。