我试图找到包含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
有人能引导我朝着正确的方向前进吗?
答案 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
newlist
或newlist
之类的任何其他可迭代时此操作才有效{3}}。然后,此操作将合并结果并将结果存储在i
中。
要将newlist
添加到newlist.append(i)
,您应该使用{{1}}代替。
答案 5 :(得分:0)
newlist是这里的列表,实际上你正在添加带有值的列表引用。
而不是那样,试试这个
newlist.append(i)
答案 6 :(得分:0)
理想情况下,如果您想要在迭代时检查type
是number
,例如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)