【问题标题】:"float" object is not iterable“浮动”对象不可迭代
【发布时间】:2015-06-02 08:21:58
【问题描述】:

我试图找出包含 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' object is not iterable”。我正在尝试迭代每个项目,而不是每个字符。

    for i in mylist:
    if type(i)== int or type(i)== float:
        newlist += i

谁能引导我朝着正确的方向前进?

【问题讨论】:

    标签: python


    【解决方案1】:

    试试这个:

    for i in mylist: 
      if type(i)== int or type(i)== float:
        newlist.append(i) 
    

    【讨论】:

      【解决方案2】:

      线

      for i in myList
      

      意味着它通过 myList,或 迭代 通过它。

      例子。如果你的字符串是"hello"

      你在最后一个 sn-p 的最后一行做了 += 的事情,

      newList 将变为['h','e','l','l','o'],这是不希望的。

      浮点数不可迭代,如 Traceback(又名错误消息)中所述

      因此,您必须将 i 追加到您想要的新列表中。这会将其添加到列表中。

      所以对于那个小sn-p,你可以这样做:

      for i in mylist: 
          if type(i)== int or type(i)== float:
              newlist.append(i) 
      

      【讨论】:

        【解决方案3】:

        您的问题源于您尝试向列表中添加内容时发生的情况。这是一个例子:

        >>> i = []
        >>> i += 'hello'
        >>> i
        ['h', 'e', 'l', 'l', 'o']
        

        您可以看到,当您尝试将某些内容添加到列表时,+= 操作数右侧的每个单独的“项目”都会单独添加到列表中。这种将项目分成其组件的能力称为迭代,当一个对象支持这一点时,我们说该对象是iterable

        列表对象在尝试向列表中添加内容时依赖于迭代对象的这种能力。

        浮点数(和整数)不可迭代,这就是您收到错误的原因。要解决问题(正如其他人所建议的那样),请使用 append() 方法,该方法只接受参数中给出的项目并将其按原样添加到列表中:

        >>> i.append('hello')
        >>> i
        ['h', 'e', 'l', 'l', 'o', 'hello']
        >>> i.append(10)
        >>> i
        ['h', 'e', 'l', 'l', 'o', 'hello', 10]
        

        【讨论】:

          【解决方案4】:

          替换这个:

          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)
          

          【讨论】:

            【解决方案5】:

            newlist 是此处的列表,实际上您正在添加带有值的列表引用。

            试试这个

            newlist.append(i) 
            

            【讨论】:

              【解决方案6】:

              理想情况下,如果您希望在迭代时检查type 是否为number,例如intfloat,那么您需要使用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)
              

              输出:

              [89.21, -3, 21, 0.0056, -12.34, 999.44409]
              

              【讨论】:

                【解决方案7】:

                当您尝试执行 newlist += i 时,python 会抱怨,因为此操作仅在 i 本身是 list(如 newlist)或任何其他可迭代(如 tuple)时才有效。然后此操作将合并结果并将结果存储在newlist 中。

                要将i 添加到newlist,您应该改用newlist.append(i)

                【讨论】:

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