簡體   English   中英

關於非常簡單的isinstance代碼的問題

[英]Question about very simple isinstance code

我試圖做一些培訓代碼,該代碼是將數據類型分開。 我做了一個列表,並與一些數字和字母,彩車我想在整數填充它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)

例如在

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM