在Python中,创建新对象通常比修改现有对象要好:
item_list = ['item', 5, 'foo', 3.14, True]
item_list = [e for e in item_list if e not in ('item', 5)]
等效于:
item_list = ['item', 5, 'foo', 3.14, True]
new_list = []
for e in item_list:
if e not in ('item', 5):
new_list.append(e)
item_list = new_list
如果过滤出的值列表很大(这里('item', 5)
是一小组元素),则使用aset
会更快,因为该in
操作的平均时间复杂度为O(1)。最好先构建要删除的可迭代对象,这样就不必在列表理解的每次迭代中都创建它:
unwanted = {'item', 5}
item_list = [e for e in item_list if e not in unwanted]