关于非常简单的物理量的问题

2024-10-06 08:52:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过做一些训练代码,代码是分离数据类型的。 我列了一张单子,上面填了一些数字、字母和浮点数 我想要整数在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
[]
>>>

Tags: 代码if字母数字整数pop单子isinstance
2条回答

例如在

for item in lst:
     if isinstance(i, int):
             lstInt.append(i)
             lst.pop(x)

i不存在。我想你是想用item

另外,通过使用pop(x),您将通过索引从列表中删除项目,这意味着如果列表变小,则删除项目后的所有项目的索引都会减少,因为要填充的项目的位置较少。因此,尽管在原始列表中[1,'a',2,'b',3,'c',4.5,9.9]'b'在索引3中,如果删除1 and 'a',那么列表现在将是[2,'b',3,'c',4.5,9.9]'b'在索引1中,而变量x仍将尝试从索引3中删除'b',因此pop(3)不再删除'b',而是删除'c'

另外,如果你写的是长程序,我不建议你使用python解释器(你可以输入命令,它会自动编译并给出答案,每一行都以>>>开头(欢迎编辑一个更好的解释)我建议要么编写脚本,然后执行它们(在某个时候),要么现在使用在线编译器

https://www.onlinegdb.com/online_python_compiler

我认为第一个错误是错误使用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)

相关问题 更多 >