def check(temp):
for i in temp:
if type(i) == str:
temp.remove(i)
temp = ['a', 'b']
print(temp) ==> Output: ['a','b']
check(temp)
print(temp) ==> Output: ['b']
运行时
temp = [ 'a', 1 ], 输出为 [1]
temp = [ 1, 'a', 'b', 'c', 2 ], 输出为 [ 1, 'b', 2 ]
有人能解释一下结果是如何评估的吗.. Thnx
您在迭代列表的同时修改它。它将跳过元素,因为列表在迭代期间发生变化。使用 list.remove()
删除项目也会删除该元素的第一次出现,因此可能会出现一些意外结果。
从列表中删除元素的规范方法是构造一个新列表,如下所示:
>>> def check(temp):
... return list(x for x in temp if not isinstance(x, str))
或者你可以返回一个常规的列表理解:
>>> def check(temp):
... return [x for x in temp if not isinstance(x, str)]
您通常应该使用 isinstance()
测试类型而不是 type()
。例如,type
对继承一无所知。
例子:
>>> check(['a', 'b', 1])
[1]
>>> check([ 1, 'a', 'b', 'c', 2 ])
[1, 2]
>>> check(['a', 'b', 'c', 'd'])
[]