以下是我尝试的代码。
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 "没有被打印出来。请帮助我。
如果你想在修改一个列表的同时对其进行迭代,可以尝试这样做。
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 "的做法。列表理解会给出更紧凑的代码,在很多情况下,结果也一样好。
它不是打印 "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]
希望对你有用