用于迭代更改列表的 Python 习惯用法

标签 python for-loop

在 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/

相关文章:

c# - for 循环中的集合值更改

python - 切片 DataFrameGroupBy 对象

python - 在 python 中打印列表输出的最佳方法

python - 如何将模块导入到 Python 上导入的其他脚本中?

for-loop - 替代 Julia 中的嵌套 for 循环

一行打印循环控制台的Javascript

python - 使用什么来代替游标计数?

python - bqplot:性能问题

python - 避免嵌套 for 循环

javascript - 在 for 循环中使用 JSON 加载数据