有很多与此类似的问题(这里是一个),但我见过的解决方案使用列表理解或过滤器,这些方法会生成一个新列表(或者在 Python 3.x 中的过滤器的情况下生成一个新的迭代器)。有一些解决方案可以通过修改列表本身来删除实例(比如 this和this),这将是我最后的手段。但是,我想看看是否有更优雅(另一个问题称之为“Pythonic”)的方式来做这件事。
为什么我不考虑生成新列表的解决方案:我正在迭代一组列表,Python 允许我修改正在迭代的“当前”列表,但不能完全替换它:
>>> ll= [[1,2,3], [2,3,4], [4,5,6]]
>>> for l in ll:
if l[0] == 2:
l = [10]
>>> ll
[[1, 2, 3], [2, 3, 4], [4, 5, 6]] #replacement didn't happen
>>> for l in ll:
if l[0] == 2:
l.remove(2)
>>> ll
[[1, 2, 3], [3, 4], [4, 5, 6]] #modification succeeded