【问题标题】:TypeError: ' Float object not Iterable'TypeError:'浮动对象不可迭代'
【发布时间】:2015-12-06 06:28:58
【问题描述】:

我有格式为

的 Datalog 文件
41, 3.68, 3.58, 3.71, 3.54, 3.68, 3.79
42, 3.69, 3.57, 3.73, 3.55, 3.67, 3.78
43, 3.68, 3.57, 3.73, 3.54, 3.68, 3.79
44, 3.68, 3.57, 3.73, 3.54, 3.67, 3.79
45, 3.68, 3.57, 3.73, 3.54, 3.67, 3.78
46, 3.68, 3.57, 3.73, 3.54, 3.67, 3.78
47, 3.68, 3.57, 3.73, 3.54, 3.67, 3.78
48, 3.68, 3.57, 3.73, 3.54, 3.67, 3.78
49, 3.68, 3.57, 3.73, 3.54, 3.67, 3.78

对于每一列,我试图找到最小值和相应的行号。

但是在下面的代码中,min() 函数给出了'float object not iterable error。

with open("Datalog.txt", "r") as file:
    result = [[float(x) for x in line.split(",")] for line in file]
    for i in range (len(result[0])):
        for j in range (len(result)):
            print (result[j][i])
            print (min(result[0][i]))

【问题讨论】:

  • 请标记语言
  • 我是 Stackoverflow 的新手,它说我需要至少 1000 个积分才能开始标记 python 3.5..

标签: python min


【解决方案1】:

min 遍历参数中的列表/元组并为您提供其中最小的项目,但您为它提供了一个浮点数,因此它试图遍历浮点数。

绝对没有理由这样做,但如果你这样做,它不会崩溃:

print (min(result[0][i],))

因为现在它不是一个浮点数,而是一个元组。它只会打印 result[0][i]

的值

如果你想要得到每一行的最小值,你必须这样做:

for i in range (len(result)):
    print (min(result[i]))

如果你想要的是每列的最小值(假设所有行的列数相同),你必须这样做:

for j in range(len(result[0]))
    print ('minimum in column ' + str(j) + ':')
    print (min([result[i][j] for i in range(len(result))]))

其中 j 是列的索引

【讨论】:

  • 我正在尝试获取每一列的最小值,上面的代码将给出每一行的最小值。
  • @crank2giri 试试我现在编辑的底部那个
  • TypeError: 'list' 对象不能被解释为整数,看起来像 "J in range(result[0]): " 应该是 "J in result(0) :"
  • @crank2giri 哎呀抱歉。我认为它是固定的
  • 非常感谢朋友!知道了。现在可以了。再次感谢。 :)
【解决方案2】:

错误是因为在

print (min(result[0][i]))

result[0][i] 是单个 float 对象,而不是您期望的列表。

相反,给min一个列表:

for j in range (len(result)):
    print(result[j][0])
    print(min(result[j][1:]))

[1:] 范围表示除第一个元素之外的所有内容。

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 2014-03-24
    • 2023-03-09
    • 2014-03-16
    • 1970-01-01
    • 2018-05-15
    • 2013-09-01
    • 2017-08-27
    • 2018-10-10
    相关资源
    最近更新 更多