将float转换为str错误:TypeError:'float'对象不可迭代

时间:2018-02-18 16:40:00

标签: python python-3.x floating-point typeerror

在我的数据分析中,函数返回单个float valuetuple(float, ...)。我想sum或将其转换为liststr,以便我可以总结一下。但是,无论我尝试什么,我都会得到:

TypeError: 'float' object is not iterable

# For e.g
print('testing float errors')
ti = 0.236
print(ti)
print(type(ti))
print()

# all below three methods don't work. Why? And, what is the solution?
fi = [str(x) for x in ti]
fi = map(str(x), ti)
fi = sum(ti)
print(fi)

4 个答案:

答案 0 :(得分:3)

你不能迭代一个浮点数,你只需要使用

if isinstance(ti, tuple):
    fi = [str(x) for x in ti]
else:
    fi = str(ti)

但是如果你有时候有一个浮点元组,你可以在使用isinstance之前检查它()

{{1}}

答案 1 :(得分:2)

按顺序回答你的问题:

  

我试图总结多个浮点数,否则保持浮点数。我只是想知道它为什么不起作用。

对于第一部分,总结多个浮点数或将其保存为浮点数,我会尝试这样的事情:

def sum_up(vals):
if isinstance(vals, tuple):
    return sum(vals)
return vals

测试:

print('Single float as a param: ',sum_up(0.236))
print('Tuple of float as a param: ',sum_up((1.23, 1.23, 0.2366)))

输出:

Single float as a param:  0.236
Tuple of float as a param:  2.6966

第二部分,I am just trying to see why it's not working.

# all below three methods don't work. Why? And, what is the solution?
fi = [str(x) for x in ti]
fi = map(str(x), ti)
fi = sum(ti)
print(fi)

以上都不会起作用,因为你不能迭代一个数字而float不可迭代。 iterable的例子可以是元组,列表,或者在这里阐明iterable is

如果您已使用fi = [str(x) for x in ti]更改fi = [x for x in str(ti)],那么您将拥有一个字符列表,您可以按照自己喜欢的方式操作它。 接下来,fi = map(str(x), ti)更改为for e in map(str, list(ti)): ... # do something with e。对于最后一个fi = sum(ti),您需要将ti的值转换为可迭代,以便在其上调用sum()。正如Azharullah Shariff提出了上述解决方案,它将有助于修复它。

答案 2 :(得分:1)

据我了解您的要求,我想这就是您想要做的事情:

形成浮点数中的字符列表,并对其中所有字符的数字进行求和。

如果是,那么这样做可以解决您的问题:

sum([int(x) for x in str(ti) if x.isdigit()])

答案 3 :(得分:1)

您可能需要测试输入以查看它是否为tuple

def sumOf(v):
    if not isinstance(v,tuple):
        v = (v,)
    return sum(v)

ti = 4.5
print(sumOf(ti))

ti = (2.3, 2.2)
print(sumOf(ti))

输出:

4.5
4.5

<强>更新

对错误的解释:

ti = 4.5
fi = [str(x) for x in ti]

    fi = [str(x) for x in ti]
TypeError: 'float' object is not iterable

错误位于理解的for x in ti部分,因为ti不可迭代。

ti = 4.5
fi = map(str(x), ti)

    fi = map(str(x), ti)
NameError: name 'x' is not defined

这是x未定义,因此无法调用str(x)

ti = 4.5
fi = sum(ti)

    fi = sum(ti)
TypeError: 'float' object is not iterable

这里的错误是sum期望迭代,你提供了一个浮动。