Python:在遍历列表时删除列表元素

发布于 2021-02-02 23:18:49

我正在遍历Python中的元素列表,对其进行一些操作,然后在满足特定条件的情况下将其删除。

for element in somelist:
    do_action(element)
    if check(element):
        remove_element_from_list

我应该使用什么来代替remove_element?我曾问过类似的问题,但注意到将对所有元素执行do_action部分,因此消除了使用过滤器的解决方案。

关注者
0
被浏览
87
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你始终可以遍历列表的副本,从而可以自由修改原始列表:

    for item in list(somelist):
      ...
      somelist.remove(item)
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    为了满足这些条件:修改原位最初的名单,没有列表的副本,只有一通,工程,传统的解决方案是迭代向后:

    for i in xrange(len(somelist) - 1, -1, -1):
        element = somelist[i]
        do_action(element)
        if check(element):
            del somelist[i]
    

    奖励:并非len(somelist)在每次迭代中都执行。适用于任何版本的Python(至少可追溯到1.5.2)... s / xrange / range / for3.X

    更新:如果要迭代转发,则可能会更加棘手和丑陋:

    i = 0
    n = len(somelist)
    while i < n:
        element = somelist[i]
        do_action(element)
        if check(element):
            del somelist[i]
            n = n - 1
        else:
            i = i + 1
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看