gpt4 book ai didi

python - 如何获取变量的类型

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:46 26 4
gpt4 key购买 nike

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

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']为什么它会留下 12?我以为它会过滤掉列表中的所有数字。

最佳答案

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

>>> 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 对象无需转换为列表即可工作。

关于python - 如何获取变量的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com