for tup in somelist:
if determine(tup):
code_to_remove_tup
我应该用什么代替code_to_remove_tup?我无法弄清楚如何以这种方式删除项目。
元芳怎么了
浏览 1263回答 6
6回答
慕盖茨4494581
您可以使用列表推导来创建仅包含您不想删除的元素的新列表:somelist = [x for x in somelist if not determine(x)]或者,通过分配切片somelist[:],您可以改变现有列表以仅包含所需的项目:somelist[:] = [x for x in somelist if not determine(x)]如果有其他参考somelist需要反映更改,则此方法可能很有用。你也可以使用而不是理解itertools。在Python 2中:from itertools import ifilterfalsesomelist[:] = ifilterfalse(determine, somelist)或者在Python 3中:from itertools import filterfalsesomelist[:] = filterfalse(determine, somelist)
您需要获取列表的副本并首先迭代它,否则迭代将失败,结果可能是意外结果。例如(取决于列表的类型):for tup in somelist[:]: etc....一个例子:>>> somelist = range(10)>>> for x in somelist:... somelist.remove(x)>>> somelist[1, 3, 5, 7, 9]>>> somelist = range(10)>>> for x in somelist[:]:... somelist.remove(x)>>> somelist[]
for i in range(len(somelist) - 1, -1, -1): if some_condition(somelist, i): del somelist[i]你需要倒退,否则就像锯掉你所坐的树枝一样:-)Python的2个用户:更换range通过xrange避免产生硬编码列表