类型错误: 'float' 对象不可迭代,Python 列表

4

我正在使用Python编写程序,试图扩展一个列表:

spectrum_mass[second] = [1.0, 2.0, 3.0]
spectrum_intensity[second] = [4.0, 5.0, 6.0]
spectrum_mass[first] = [1.0, 34.0, 35.0]
spectrum_intensity[second] = [7.0, 8.0, 9.0]

for i in spectrum_mass[second]:
    if i not in spectrum_mass[first]:
        spectrum_intensity[first].extend(spectrum_intensity[second][spectrum_mass[second].index(i)])
        spectrum_mass[first].extend(i)

然而,当我尝试这样做时,在第三行上出现了“TypeError: 'float' object is not iterable”错误提示。要明确的是,spectrum_mass[second]是一个列表(在字典中,second和first是键),以及spectrum_intensity[first]、spectrum_intensity[second]和spectrum_mass[second]也是列表。所有的列表都包含浮点数。
1个回答

15

我猜想问题出在这一行 -

spectrum_intensity[first].extend(spectrum_intensity[second][spectrum_mass[second].index(i)])

extend()函数需要一个可迭代对象,但您正尝试给它传递一个浮点数。在一个非常简单的示例中会有同样的行为 -

>>> l = [1,2]
>>> l.extend(1.2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object is not iterable

你需要使用.append()而不是 -

spectrum_intensity[first].append(spectrum_intensity[second][spectrum_mass[second].index(i)]) 

在下一行也存在同样的问题,使用append()代替extend() -

spectrum_mass[first].extend(i)

1
好问题,好答案,我也没有找到任何即时的重复 :). 干得好。 - jumps4fun
这似乎是一个合理的地方,可以链接到关于appendextend之间差异的此SO问题 - LondonRob
我也从这个类似主题的SO讨论中学到了一些东西。 - LondonRob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接