2015-04-07 71 views
0

我想找到包含int,float和str類型的列表的意思。當我迭代並打印每個項目時,代碼就可以工作。「浮動」的對象是不可迭代的

mylist = ["hello", 89.21, -3, "goodbye", 21, 0.0056, -12.34, "thank you", "please", 999.44409] 
newlist = [] 
for i in mylist: 
    print(i) 

,其結果是

hello 
89.21 
-3 
goodbye 
21 
0.0056 
-12.34 
thank you 
please 
999.44409 

但後來當我嘗試在操作每一個「我」,它給我的錯誤「類型錯誤:‘浮動’對象不是可迭代」。我試圖迭代每個項目,而不是每個字符。

for i in mylist: 
    if type(i)== int or type(i)== float: 
     newlist += i 

任何人都可以引導我走向正確的方向嗎?

回答

0

替換此:

newlist += i 

有:

newlist += [i]  

演示:

>>> [3.0] +4.0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can only concatenate list (not "float") to list 

>>> [3.0] + [4.0] 
[3.0, 4.0] 

你也可以你list.append在列表的末尾添加元素

newlist.append(i) 
1

試試這個:

for i in mylist: 
    if type(i)== int or type(i)== float: 
    newlist.append(i) 
2

for i in myList 

意味着它經過myList中,或迭代穿過。

示例。如果你的字符串爲"hello"

和你做的最後片段的最後一行+ =東西,

的newList將成爲['h','e','l','l','o'],這是不期望。

花車都沒有可迭代的,因爲在回溯規定(又名錯誤消息)

因此,你必須追加的我到你想要的新名單。這會將其添加到列表中。

因此,對於這個小片斷,你可以這樣做:

for i in mylist: 
    if type(i)== int or type(i)== float: 
     newlist.append(i) 
1

你的問題,從當您嘗試的東西添加到列表中會發生什麼結果。這裏有一個例子:

>>> i = [] 
>>> i += 'hello' 
>>> i 
['h', 'e', 'l', 'l', 'o'] 

你可以看到,當你嘗試的東西添加到列表中,無論什麼是對+=操作數的右每一個人「項目」分別添加到列表中。這種將項目分解爲其組件的能力被稱爲迭代,並且當一個對象支持這個時,我們說該對象是可迭代的

當試圖向列表中添加東西時,列表對象依賴於此功能來迭代對象。

浮點數(和整數)是不可迭代的,這就是爲什麼你會得到錯誤。要解決該問題(如其他人所說),使用append()方法,它只是需要給定參數的項目,並將其添加爲的就是名單:

>>> i.append('hello') 
>>> i 
['h', 'e', 'l', 'l', 'o', 'hello'] 
>>> i.append(10) 
>>> i 
['h', 'e', 'l', 'l', 'o', 'hello', 10] 
0

當你嘗試做一個newlist += i,蟒蛇因爲此操作僅在i本身是list(如newlist)或任何其他迭代(如tuple)時纔有效。然後,該操作將結果合併並將結果存儲在newlist中。

要將i添加到newlist,您應該改爲使用newlist.append(i)

0

newlist在這裏是一個列表,其實你正在添加列表引用的值。

取而代之的是,試試這個

newlist.append(i) 
0

理想的情況下,如果你正在尋找檢查type是爲intfloatnumber這種迭代時,那麼你需要使用isinstance,做一些如:

import numbers 

mylist = ["hello", 89.21, -3, "goodbye", 21, 0.0056, -12.34, "thank you", "please", 999.44409] 
newlist = [] 
for i in mylist: 
    if isinstance(i, (int, float)): 
     newlist += [i] 
print(newlist) 

輸出:

[89.21, -3, 21, 0.0056, -12.34, 999.44409]