【问题标题】:Summing a list of lists [duplicate]汇总列表列表[重复]
【发布时间】:2018-01-31 07:24:03
【问题描述】:

我在 Python 3.6 中发现了一件奇怪的事情。以下代码返回

TypeError: +: 'int' 和 'list' 的操作数类型不受支持

arr = [1, 2, 3, 4, 5]
print(sum([[i] for i in arr]))

为什么会这样?如何汇总列表列表?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    这是来自 REPL 的帮助:

    >>> help(sum)
    

    sum(iterable, start=0, /)
        Return the sum of a 'start' value (default: 0) plus an iterable of numbers
    
        When the iterable is empty, return the start value.
        This function is intended specifically for use with numeric values and may
        reject non-numeric types.
    

    因此,sum 内置函数返回 start 值的总和,即 0,以及 数字 的可迭代对象。 Python 不会事先阻止您滥用函数,它相信您至少在尝试做正确的事情。当然,如果你碰巧传递了一个list-of-lists,第一个列表元素将与0相加,提升:

    TypeError: unsupported operand type(s) for +: 'int' and 'list'
    

    确实,如果你传递一个start 参数,一个空列表,在这种情况下,它可以工作:

    >>> sum([[e] for e in x], [])
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    但是,这将是低效的。您应该更喜欢[x for sublist in list_of_lists for x in sublist] 或任何其他线性时间算法。

    【讨论】:

      【解决方案2】:

      首先,您的[[i] for i in arr] 返回[[1], [2], [3], [4], [5]]

      为什么不简单地打印数组的总和:

      print(sum(arr))
      

      或者,如果您不想更改您的[[i] for i in arr]

      print(sum([[i] for i in arr], []))
      

      不过,我更喜欢使用 sum(arr),代码更短且可读性强。

      【讨论】:

        【解决方案3】:

        你应该这样使用它。

        print (sum(i for i in arr))
        

        如果你像 [i] 一样在 'i' 周围使用括号,这意味着 'i' 是元组中的一个元素,你不可能将整数与列表相加。

        TypeError: unsupported operand type(s) for +: 'int' and 'list' --> 这意味着它不能将整数与列表相加。因为当你使用 for 循环时,它每次都会给你一个元素,循环被执行,即一个整数,但你期望一个列表返回给 sum() 函数。因此,它不会那样工作。

        【讨论】:

          【解决方案4】:

          只是做...

          arr = [1, 2, 3, 4, 5]
          print sum(arr)
          

          您想要汇总多个元素。您已经有一个列表要输入以发挥作用。为什么要使用已有的列表来理解列表?

          如果您想将列表展平为一个列表,以便总结所有内容,您可以观看此thread,并使用sum 就像我在上面所做的那样。

          【讨论】:

            猜你喜欢
            • 2020-08-31
            • 1970-01-01
            • 2018-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-03
            • 2016-10-20
            • 2017-09-07
            相关资源
            最近更新 更多