Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取变量的类型_Python_List_Function_Types - Fatal编程技术网

Python 如何获取变量的类型

Python 如何获取变量的类型,python,list,function,types,Python,List,Function,Types,我创建了一个函数,将列表作为参数,并删除了空格或数字。代码如下: 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) =

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

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
?我认为它会过滤掉列表中的所有数字。

这是一种适合中等规模列表的方法

 def cleaner(lst,filter_item = ' '):
        if filter_item == ' ':
            for i in list(lst):
                if i == ' ':
                    lst.remove(' ')
        elif filter_item == 'int':
            for i in list(lst):
                if type(i) == int:
                    lst.remove(i)

 myList = ['h' ' ', 'g', 1, 2, 3, 4, 5, 'p']
 cleaner(myList, 'int')
 print(myList)
或者更好的方式:

 def cleaner(lst,filter_item = ' '):
     retval = None
     if filter_item == ' ':
         retval = [i for i in lst if i != ' ']
     elif filter_item == 'int':
         retval = [i for i in lst if type(i) != int]
     return retval 

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

对于中等规模的列表,这将是一种适当的方法

 def cleaner(lst,filter_item = ' '):
        if filter_item == ' ':
            for i in list(lst):
                if i == ' ':
                    lst.remove(' ')
        elif filter_item == 'int':
            for i in list(lst):
                if type(i) == int:
                    lst.remove(i)

 myList = ['h' ' ', 'g', 1, 2, 3, 4, 5, 'p']
 cleaner(myList, 'int')
 print(myList)
或者更好的方式:

 def cleaner(lst,filter_item = ' '):
     retval = None
     if filter_item == ' ':
         retval = [i for i in lst if i != ' ']
     elif filter_item == 'int':
         retval = [i for i in lst if type(i) != int]
     return retval 

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

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

>>> 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)

注意:Python 3
filter()
函数返回一个
filter
对象,而不是一个列表。如果您只是在迭代,那么它会更有效,但是如果您确实需要一个列表,您可以使用
list(filter(…)


所有这些文件都是列表的副本,而不是将它们的工作放在适当的位置。如果您希望将其放在适当的位置,请使用
myList[:]=…
而不是
myList=…
(在
filter()
行中)。请注意,Python 3
筛选器对象不需要转换为列表才能正常工作。

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

>>> 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)

注意:Python 3
filter()
函数返回一个
filter
对象,而不是一个列表。如果您只是在迭代,那么它会更有效,但是如果您确实需要一个列表,您可以使用
list(filter(…)



所有这些文件都是列表的副本,而不是将它们的工作放在适当的位置。如果您希望将其放在适当的位置,请使用
myList[:]=…
而不是
myList=…
(在
filter()
行中)。请注意,Python3
过滤器
对象不需要转换为列表才能正常工作。

首先,您不使用内置类型名称作为变量或参数;其次,在迭代时,您不从列表中删除打印应打印的内容none@Marko我们会知道的,但我觉得我写的
type(i)
我应该将其与内置类型进行比较
int
首先,您不使用内置类型名称作为变量或参数;其次,在迭代时,您不从列表中删除打印应打印的内容none@Marko我们会知道的,但我认为我写的
type(I)就是这种感觉
我应该将其与内置类型
int
进行比较
filter
是否是python中保留的内置函数?@Marco-hmm。令人惊讶的是,您的代码似乎仍然可以正常工作:)@Mr.python危险的是,您可以覆盖python中的内置函数。因此,它可以正常工作,因为默认的
过滤器已被覆盖根据函数的参数定义,这正是我想说的him@xgord哦,相信我,我很清楚使用内置函数或关键字作为变量是一个危险的想法。我只是惊讶于Marko的代码没有严重失败。在python中,
filter
不是一个保留的内置函数吗?@Marco-hmm。令人惊讶的是我们的代码似乎仍然可以正常工作:)@Mr.Python危险的是,您可以覆盖Python中的内置函数。因此,它可以正常工作,因为默认的
filter
已被函数的参数定义覆盖(eah:)这正是我想说的him@xgord相信我,我很清楚使用内置函数or关键字作为变量是一个危险的想法。我只是惊讶于Marko的代码没有严重失败。在Python 3中,filter函数将返回一个生成器对象而不是列表。这避免了构建一个完整的结果列表,并且如果您对结果所做的只是对其进行迭代,也不会产生任何影响。如果您需要实际的Python 3中的list对象,使用myList=list(过滤器(lambda x:x!='',myList))
在Python 3中,filter函数将返回一个generator对象而不是list。这避免了构建一个完整的结果列表,并且如果您对结果所做的一切都是对其进行迭代,也不会产生任何影响。如果您在Python 3中需要实际的list对象,请使用
myList=list(filter(lambda x:x!='',myList))