有人能向我解释为什么这段代码只从列表中删除一个元素,而不是我所期望的每个元素吗?
所以我有一个列表,假设是: 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‘,这是令人困惑的。
发布于 2020-05-10 09:28:07
看看这个:
l = [1,2,'a','b']
print([item for item in l if isinstance(item, int)])我建议您使用is实例内置函数,而不是类型。此外,如果您的列表中有一个与字符串或整数不同的项,则最好检查是否为整数。
如果您想要删除它,可以简单地在旧列表上分配新列表。
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)并中断。
这就是为什么我们不能正确地这样做的原因。
发布于 2020-05-10 10:02:20
Lambda功能:
[*filter(lambda x: isinstance(x, int), l)]数据:
l = [1,2,'a','b'] https://stackoverflow.com/questions/61709736
复制相似问题