在 python 中是否有更好的(更明显/惯用的)方法来编写等同于
index = 0
while index < len(some_list):
do_some_stuff(some_list[index]) # may have many side effects
if delete_element(some_list[index]):
del some_list[index]
else:
index += 1
或字典的等效字典?字典/列表理解不是问题,因为 delete_element
的结果可能取决于 do_some_stuff
。
最佳答案
您可以将操作分解为两个单独的循环,并对第二部分使用列表理解。
for value in some_list:
do_some_stuff(value)
some_list = [value for value in some_list if not delete_element(value)]
另一种解决方案是遍历列表的副本,并使用 enumerate
来跟踪索引,而无需手动维护计数器。
for index, value in enumerate(some_list[::-1]):
do_some_stuff(value)
if delete_element(value):
del some_list[-index - 1]
您希望向后迭代,这样您就不必为删除的元素调整 index
。
关于用于迭代更改列表的 Python 习惯用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066058/