“float”对象不可迭代

时间:2015-04-07 04:50:58

标签: python

我试图找到包含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

但是当我尝试对每个" i"它给了我错误" TypeError:' float'对象不可迭代"。我试图迭代每个项目,而不是每个角色。

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

有人能引导我朝着正确的方向前进吗?

7 个答案:

答案 0 :(得分:2)

for i in myList

表示它通过myList,或通过它迭代

例子。如果您的字符串是"hello"

你在最后一个片段的最后一行做了+ =,

newList将变为['h','e','l','l','o'],这是不可取的。

Floats不可迭代,如Traceback(又名错误消息)中所述

因此,您必须将追加 i添加到您想要的新列表中。这会将它添加到列表中。

所以对于那个小片段,你可以这样做:

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

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:1)

当您尝试向列表添加内容时,会出现问题。这是一个例子:

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

您可以看到,当您尝试向列表添加内容时,+=操作数右侧的任何内容的每个“项”都会单独添加到列表中。将项目分成其组件的能力称为 iteration ,当对象支持此项时,我们说该对象是 iterable

列表对象依赖于在尝试将内容添加到列表时迭代对象的能力。

浮点数(和整数)不可迭代,这就是你得到错误的原因。要解决问题(正如其他人所建议的那样),请使用append()方法,该方法只接受参数中给出的项目并将其按原样添加到列表中:

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

答案 3 :(得分: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)

答案 4 :(得分:0)

当您尝试执行newlist += i时,python会抱怨,因为只有当i本身是list newlistnewlist之类的任何其他可迭代时此操作才有效{3}}。然后,此操作将合并结果并将结果存储在i中。

要将newlist添加到newlist.append(i),您应该使用{{1}}代替。

答案 5 :(得分:0)

newlist是这里的列表,实际上你正在添加带有值的列表引用。

而不是那样,试试这个

newlist.append(i) 

答案 6 :(得分:0)

理想情况下,如果您想要在迭代时检查typenumber,例如int还是float,那么您将要使用{{ 1}},做一些如:

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)