Python列表过滤
有人能解释一下为什么这段代码只从列表中删除了一个元素,而不是我所期望的每个元素吗Python列表过滤,python,list,Python,List,有人能解释一下为什么这段代码只从列表中删除了一个元素,而不是我所期望的每个元素吗 所以我有一个列表,假设它是:[1,2,'a','b'] 我想从列表中删除每个字符串 def filter_list(l): for i in l: if type(i) == str: l.remove(i) filter_list([1,2,'a','b']) 所以在这之后,我收到=[1,2,'b'],这让人困惑。请检查: l = [1,2,'a','b'] pr
所以我有一个列表,假设它是:[1,2,'a','b']
我想从列表中删除每个字符串
def filter_list(l):
for i in l:
if type(i) == str:
l.remove(i)
filter_list([1,2,'a','b'])
所以在这之后,我收到=[1,2,'b'],这让人困惑。请检查:
l = [1,2,'a','b']
print([item for item in l if isinstance(item, int)])
我建议您使用isinstance内置函数而不是类型。此外,最好检查是否为整数,以防列表中的项与字符串或整数不同
如果要删除它,只需在旧列表上分配新列表即可
l = [1,2,'a','b']
l = [item for item in l if isinstance(item, int)]
print(l)
为什么您不能跳过循环:
让我解释一下
def filter_list(l):
for index, i in enumerate(l):
if type(i) == str:
l.remove(i)
return l
filter_list([1,2,'a','b'])
第一次迭代for循环的索引为0:
i
变为1,无需删除它
第二次迭代for循环的索引为1:
i
变为2,无需删除它
第三次迭代for循环的索引为2:
i
变为'a'
,需要将其删除
此时,我们只是删除了'a'
。列表的长度已更改。
减少了1。新列表变成了[1,2,'b']
,因为我们删除了'a'
第4次迭代for循环的索引为3:
因为我们在上一次迭代中删除了变量,所以列表的索引不再是3。循环将引发StopIteration错误(IndexError),并中断
这就是我们无法正确执行此操作的原因。Lambda函数:
[*filter(lambda x: isinstance(x, int), l)]
数据:
因为你正在修改你正在迭代的列表,所以我应该如何删除每个字符串?尽管如此,为什么我不能循环这个?我试图解释为什么:)为什么被否决?我看不到这个解决方案或这个问题在任何地方重复(以其确切形式)。
l = [1,2,'a','b']