为什么一个列表中的一些项目在迭代过程中没有打印出来?

问题描述 投票:0回答:1

以下是我尝试的代码。

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 "没有被打印出来。请帮助我。

python
1个回答
0
投票

如果你想在修改一个列表的同时对其进行迭代,可以尝试这样做。

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 "的做法。列表理解会给出更紧凑的代码,在很多情况下,结果也一样好。


0
投票

它不是打印 "1 "和 "123",因为你是在同一个for循环中打印和使用in instance,也就是说,它将打印所有的项目,然后再使用in instance。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

1

2

aasf

1

123

123

[1, 2, '1', 123]

这张图是代码和输出的结果

希望对你有用

© www.soinside.com 2019 - 2024. All rights reserved.