为什么列表中的某些项不在迭代中打印?

2024-09-30 18:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我尝试的代码:

def filter_list(lst):
    for l in lst:
        print(l)
        if isinstance(l, str):
            lst.remove(l)
    return lst
print(filter_list([1, 2, "aasf", "1", "123", 123]))

我收到了以下输出:

C:\Users\acain\PycharmProjects\gfn\venv\Scripts\python.exe C:/Users/acain/PycharmProjects/gfn/experiment.py
1
2
aasf
123
[1, 2, '1', 123]

Process finished with exit code 0  

我不明白为什么字符串“1”和“123”没有打印出来。请帮帮我


Tags: 代码inforifdeffilteruserslist
2条回答

当您在同一for循环中打印和使用实例时,它不会打印“1”和“123”,即。 for l in lst: print(l)

它将打印所有项目 但是在这个循环中,您使用的是isinstance(l,str)。正在移除项目。 请尝试以下代码:-

    def filter_list(lst):
        for l in lst:
            print(l)
        for l in lst:
            if isinstance(l, str):
                lst.remove(l)
        return lst
    print(filter_list([1, 2, "aasf", "1", "123", 123]))

输出:- $python hello2.py

一,

二,

aasf

一,

123

123

[1,2,1,123]

here in this image is the code and the output

我希望这对你有用

如果要在修改列表时对其进行迭代,请尝试以下操作:

def filter_list(lst):
    i = 0
    while i < len(lst):
        print(lst[i])
        if isinstance(lst[i], str):
            lst.remove(i)
        else:
            i += 1
    return lst

这样,每次迭代要么缩短列表,要么推进指针

值得注意的是,这并不被认为是过度的“Pythonic”。列表理解将提供更紧凑的代码,在许多情况下,结果也同样好

相关问题 更多 >