【问题标题】:TypeError: 'int' object is not iterableTypeError:“int”对象不可迭代
【发布时间】:2017-09-11 12:34:45
【问题描述】:

执行此代码时出现错误-
for i in len(str_list): TypeError: 'int' 对象不可迭代

我将如何解决它? (Python 3)

def str_avg(str):
    str_list=str.split()
    str_sum=0
    for i in len(str_list):
        str_sum += len(str_list[i])
    return str_sum/i

【问题讨论】:

  • len(str_list) 会给出一个整数,你只能遍历iterals。也许你想要range(len(str_list))
  • 为什么不直接使用for elem in str_list:str_sum += len(elem)? Python for 循环是 for each 构造,因此您可以直接循环遍历元素。

标签: python typeerror


【解决方案1】:

在运行 for 循环时,我们需要提供任何可迭代对象。如果我们使用len(str_list),那么它将是一个整数值。我们不能使整数可迭代。

解决方案 - 使用 range() 函数。

for i in range(len(str_list)):

在本文中获取完整的详细信息。 enter link description here

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:
def str_avg(str):
    str_list = str.split()
    str_sum = len(''.join(str_list))  # get the total number of characters in str
    str_count = len(str_list)  # get the total words

    return (str_sum / str_count)

【讨论】:

    【解决方案3】:

    For 循环需要多个项目来迭代,例如 [1, 2, 3] 的列表(包含 3 个项目/元素)。

    len 函数返回一个项目,它是您作为参数提供的对象长度的整数。

    要让某个对象的迭代次数与对象的长度一样多,您可以将 len 函数的结果提供给 range 函数。这将创建一个可迭代对象,允许您根据所需对象的长度随时进行迭代。

    所以做一些类似的事情

    for i in range(len(str_list)):
    

    除非你想通过列表而不是列表的长度。然后你可以迭代

    for i in str_list:
    

    【讨论】:

      【解决方案4】:

      你正试图以整数循环; len() 返回一个。

      如果您必须在整数序列上生成循环,请使用range() object

      for i in range(len(str_list)):
          # ...
      

      通过将len(str_list) 结果传递给range(),您将得到一个从零到str_list 长度减一的序列(因为不包括结束值)。

      请注意,现在您的 i 值将是用于计算平均值的不正确值,因为它比实际列表长度小一!你想除以len(str_list)

      return str_sum / len(str_list)
      

      但是,不需要在 Python 中执行此操作。你循环遍历 list 本身的元素。这消除了首先创建索引的需要:

      for elem in str_list
          str_sum += len(elem)
      
      return str_sum / len(str_list)
      

      这一切都可以用sum() function一行来表达,顺便说一句:

      def str_avg(s):
          str_list = s.split()
          return sum(len(w) for w in str_list) / len(str_list)
      

      我将名称str 替换为s;最好不要掩盖内置类型名称,这可能会导致以后出现令人困惑的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-22
        • 2018-09-29
        • 2020-02-26
        • 2015-04-06
        • 2013-10-31
        • 2018-03-14
        相关资源
        最近更新 更多