Skip to main content
 首页 » 编程设计

python之如何获取变量的类型

2025年05月04日24tuyile006

我创建了一个函数,它将一个列表作为参数并删除了一个空格或一个数字。代码如下:

def cleaner(List, filter_out=' '): 
    if filter_out == ' ': 
        for i in List: 
            if i == ' ': 
                List.remove(' ') 
    if filter_out == 'int': 
        for i in List: 
            if type(i) == int: 
                List.remove(i) 

我使用如下列表对其进行了测试:

myList = ['h' ' ', 'g', 1, 2, 3, 4, 5, 'p'] 
print(cleaner(myList, filter_out='int')) 

我希望得到 ['h' ' ', 'g', 'p'] 而是打印出 ['h ', 'g', 2, 4, 'p'] 为什么它会留下 1 和 2?我以为它会过滤掉列表中的所有数字。

请您参考如下方法:

在迭代列表时从列表中删除项目会导致不良后果:

>>> nums = [1, 2, 3, 4] 
>>> for x in nums: 
...     print x 
...     nums.remove(x) 
...  
1 
3 

你从索引 0 开始。你打印 nums[0], 1。然后你删除它。下一个索引是 1。那么,[nums[1] 是 3,因为现在列表是 [2, 3, 4]。您打印它,然后将其删除。该列表现在是 [2, 4],您位于第三个索引处。由于 nums[2] 不存在,循环结束,跳过两个数字。您应该做的是利用内置函数:

myList = ... 
myList = filter(lambda x: not isinstance(x, int), myList) 

以 ' ' 为例,它将是:

myList = ... 
myList = filter(str.strip, myList) 

或

myList = filter(lambda x: x != ' ', myList) 

注意:Python 3 filter() 函数返回一个filter 对象,而不是一个列表。如果您只是迭代,这会提高效率,但如果您确实需要一个列表,则可以使用 list(filter(...))。

所有这些都制作列表的副本,而不是在原地工作。如果你想要它,使用 myList[:] = ... 而不是 myList = ... (在 filter()线)。请注意,Python 3 filter 对象无需转换为列表即可工作。