python - 关于非常简单的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
[]
>>>
解决方案
我相信第一个错误是滥用 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)
推荐阅读
- windows - 识别文件是否未写入的程序
- python - (Python) 打印所有 '\' 转义字符
- javascript - 如何从 Node.js 连接到 MySQL(phphmyadmin)?
- azure - 使用命令行参数启动时 Azure ACI 容器部署失败
- c# - 在 UWP ListView 中实现数据虚拟化而不复制项目
- count - 需要计算一个值的位数时的 DB2 案例
- javascript - 未捕获(承诺)类型错误:无法读取未定义的属性“fisierUrl”
- apache-spark - 在 Spark 中合并多行
- python - 读取数据时删除列包含某些字符串:python
- ios - 可供 AVSpeechSynthesis 在 iOS 中使用的已安装语音的可用性