繁体   English   中英

Python 中的循环在 False 之前停止

[英]While loop in Python stopping before False

我有一个字符串列表。 我不需要一些字符串,因为它是重复的 header。 我使用应该删除字符串的while循环定义了一个function,但是我需要多次运行单元格,因为while循环在i = len(list_of_strings)之前停止。 如果我多次运行该单元,那么它最终会起作用。 我做错了什么?

def header_eraser(list_of_strings):
    i=0
    while i < len(list_of_strings):
        if list_of_strings[i] in headers:
            del list_of_strings[i]
            i+=1
        else:
            i+=1

正如Sayse评论中所说:

如果要删除索引,则不需要增加i因为下一个索引将移动到当前 position

IE

def header_eraser(list_of_strings):
    i = 0
    while i < len(list_of_strings):
        if list_of_strings[i] in headers:
            del list_of_strings[i]
            # i += 1  # <- Remove this line
        else:
            i += 1

但是,您可能会发现使用列表推导更容易,它需要返回一个新列表而不是修改现有列表:

def header_eraser(list_of_strings):
    return [s for s in list_of_strings if s not in headers]

当您删除一个元素时,列表的长度会发生变化,因此您会跳过一些元素,这就是为什么如果您多次运行它会起作用的原因。

我会在这里建议一个for循环,所以你不必担心索引:

def header_eraser(list_of_strings):
    new_list = []
    for s in list_of_strings:
        if s not in headers:
            new_list.append(s)
    return new_list

这也可以写成列表推导:

new_list = [s for s in list_of_strings if s not in headers]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM