使用循环删除列表中不满足特定条件的元素

Delete element in a list that do not meet certain conditions using a loop

在读取列表时'lst',我想删除一个不符合特定条件的元素。基于以下答案:Strange result when removing item from a list while iterating over it 我找到了一个非常有效的解决方案。这是 PyCharm 中的代码:

for ind, el in enumerate(lst):
    if not el.strip() or el.strip() != 'LABEL':
        lst[ind] = None #  here I get a warning concerning ind
    else:
        break
lst = [n for n in lst if n is not None]

我不明白为什么会收到此警告:

Unexpected type(s): (int, None) Possible type(s): (SupportsIndex, str) (slice, Iterable[str]) 
Inspection info:
Reports type errors in function call expressions, targets, and return values. In a dynamically typed language, this is possible in a limited number of cases.
Types of function parameters can be specified in docstrings or in Python 3 function annotations.

我们看不到代码的其余部分,但您可能对 lst 进行了类型提示,使其只有 str 个元素,而 None 不是 str .

虽然您不必实施 2-pass 算法来删除元素。以下应该等同于您的代码,没有警告(请参阅 docs for dropwhile):

from itertools import dropwhile

lst = list(dropwhile(lambda el: el.strip() != 'LABEL', lst))

您可以使用列表理解并在一行中完成所有操作。请看下面的代码:

new_list = [x for x in lst if x.strip() != 'LABEL']

还有一件事,我不认为在循环遍历列表时修改列表是个好主意。