【问题标题】:converting float to str error: TypeError: 'float' object is not iterable将 float 转换为 str 错误:TypeError: 'float' object is not iterable
【发布时间】:2018-07-28 23:20:12
【问题描述】:

在我的数据分析中,函数返回单个 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)

【问题讨论】:

  • 您的预期输出是什么?您不能迭代 0.236 的单个值。您是否尝试遍历该数字的数字?
  • 有些是单个浮点数,有些是浮点数的元组。我正在尝试对多个浮点数求和,否则将其保持为浮点数。我只是想看看为什么它不起作用。至少我应该能够将它们转换为str,但我不能。
  • 第一种方法使用str(ti),否则,您将尝试迭代浮点数,而不是字符串。
  • 使用:fi = ti if isinstance(ti, float) else sum(ti).
  • 你的英语足够好,但问题陈述不是。你想总结什么?您对str 有何评价?您应该为您的两种情况放置一个预期的输出(floattuplefloats)。你之前的评论肯定会吸引很多反对票。我也觉得在无脑的人手中投票是一个太强大的工具(只要他们不理解一个问题,即使它是有效的,他们也会使用它),但这里不是这种情况。

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


【解决方案1】:

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

fi = str(ti)

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

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

【讨论】:

    【解决方案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 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 提出的上述解决方案,它将有助于修复它。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

        您可能需要测试您的输入以查看它是否为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 需要一个可迭代对象,而您提供了一个浮点数。

        【讨论】:

          猜你喜欢
          • 2021-08-08
          • 1970-01-01
          • 1970-01-01
          • 2016-03-25
          • 2019-06-20
          • 2022-08-23
          • 2014-11-16
          • 1970-01-01
          • 2021-09-24
          相关资源
          最近更新 更多