[英]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解釋器(您可以在其中鍵入命令並自動編譯並給出答案的東西,每行以>>>
開頭)(對此的更好解釋(歡迎在其中進行編輯)我建議要么編寫腳本然后執行它們(在某個時候),要么建議現在使用聯機編譯器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.