首页 > 解决方案 > 关于非常简单的isinstance代码的问题

问题描述

我试着做一些训练代码,代码是为了分离数据类型。我做了一个列表并用一些数字和字母和浮点数填充它我想要整数数字lstInt和浮点数lstflt和字符串lstsrt

>>> lst=[1,'a',2,'b',3,'c',4.5,9.9]
>>> lstInt=[]
>>> lstflt=[]
>>> lststr=[]
>>> x=0
>>> for item in lst:
...     if isinstance(i, int):
...             lstInt.append(i)
...             lst.pop(x)
...     if isinstance(i, str):
...             lststr.append(i)
...             lst.pop(x)
...     if isinstance(i, float):
...             lstflt.append(i)
...             lst.pop(x)
...     x=x+1
...
1
2
3
4.5
>>> lst
['a', 'b', 'c', 9.9]
>>> lstInt
[]
>>> lstflt
[]
>>> lststr
[]
>>>

标签: pythonpython-3.x

解决方案


我相信第一个错误是滥用 for 循环变量。您已将“item”定义为 for 循环变量,但在 isinstance 和 append 中您使用的是“i”。

此外,当您从列表中弹出元素时,您正在更改位置,这会干扰循环。for 循环从元素 0(第一个元素)开始,在您的代码案例中为数字“1”,当程序结束第一次迭代时,它现在将采用元素 1(第二个元素),但是因为它已经弹出了第一个元素,现在第一个元素是字母“a”,第二个是数字“2”,这将使程序每次迭代时都会忽略一个元素。

我认为你想要的代码是这样的:

>>> for item in lst:
...     if isinstance(item, int):
...         lstInt.append(item)
...     if isinstance(item, str):
...         lststr.append(item)
...     if isinstance(item, float):
...         lstflt.append(item)

推荐阅读