Skip to main content
 首页 » 编程设计

python之重复 for 循环直到完成

2025年05月04日13jirigala

我需要创建一个函数来删除我的程序测试的任何列表中的偶数,但是,它在删除第一个偶数后停止,我不确定如何继续运行

def filter_odds(data): 
     for index in range(len(data)): 
        index = data[index] 
        if index % 2 == 0: 
            data.remove(index) 
        else: 
            continue 
        return data 
print(filter_odds([1,2,3,4,5,6])) 

请您参考如下方法:

你有两个问题:

  1. return在循环体内,所以循环一次就返回
  2. 你正在改变 list在迭代期间,你会死于 IndexError因为循环运行到 list 的原始长度,即使 list边走边缩。

无论哪种方式,list理解会做得更好:

def filter_odds(data): 
    return [x for x in data if x % 2] 

如果出于某种原因你需要改变参数,而不仅仅是返回你关心的值的修改副本,你也可以轻松做到这一点:

def filter_odds(data): 
    # Assigning to slice with no end points replaces contents with values 
    # from new list, modifying in place 
    data[:] = [x for x in data if x % 2] 
    return data     # Return the mutated argument as in original code 

如果目标是删除偶数索引而不是偶数值,您可以使用扩展切片来高效地以 Python 方式疯狂地执行此操作:

def filter_odds(data): 
    return data[1::2] 

或者改变参数:

def filter_odds(data): 
    del data[::2]   # Deletes the even indices in place in a single pass 
    return data     # Return the mutated argument as in original code