【问题标题】:Find summary of values contained in a matrix in python3在python3中查找矩阵中包含的值的摘要
【发布时间】:2014-05-01 01:45:34
【问题描述】:

我想知道如何对矩阵中包含的值进行汇总?我目前有以下代码用于输入矩阵:

matrix = []
    loop = True
    while loop:
        line = input()
        if not line: 
            loop = False
        values = line.split()
        row = [int(value) for value in values]
        matrix.append(row)

例如,矩阵 [[1,2,3],[4,5,6]] 将得到 21,即所有值的汇总。我不太确定该怎么做。

谢谢!

【问题讨论】:

    标签: python-3.x matrix integer summary


    【解决方案1】:

    您可以使用内置的sum() 函数。由于您的矩阵不是扁平的,而是列表列表,因此您需要将其扁平化为sum()

    sum(val for row in matrix for val in row)
    

    【讨论】:

      【解决方案2】:

      您可以使用列表推导:

      matrix = [[1, 2, 3], [4, 5, 6]]
      sums = sum(y for x in matrix for y in x)
      print sums
      

      运行如下:

      >>> matrix = [[1, 2, 3], [4, 5, 6]]
      >>> sums = sum(y for x in matrix for y in x)
      >>> print sums
      21
      >>> 
      

      或者您可以使用基本的for 循环:

      matrix = [[1, 2, 3], [4, 5, 6]]
      sums = 0
      for sub in matrix:
          for value in sub:
              sums+=value
      
      print sums
      

      运行如下:

      >>> matrix = [[1, 2, 3], [4, 5, 6]]
      >>> sums = 0
      >>> for sub in matrix:
      ...     for value in sub:
      ...         sums+=value
      ... 
      >>> print sums
      21
      >>> 
      

      列表推导与双 for 循环相同,仅在一行中:

      下面的解释:

      sums = sum(y for x in matrix for y in x)
      

      让我们从头开始:

      我们使用内置函数sum() 来计算列表中的所有值:

      >>> sum([1, 2, 3, 4]) #Should be 10
      10
      >>> 
      

      但是,sum() 仅适用于 扁平化 列表:

      >>> sum([[1, 2], [3, 4]])
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      TypeError: unsupported operand type(s) for +: 'int' and 'list'
      >>> 
      

      因此,我们需要用双 for 循环展平它:

      sum(y for x in matrix for y in x)
      

      for x in matrix 基本上取矩阵的每个值,在这种情况下基本上是[1, 2, 3][4, 5, 6]for y in x 正在分配 y to every value of x[1, 2, 3, 4, 5, 6]。这是我们的扁平化列表。然后我们调用sum(),一切都像变魔术一样!

      【讨论】:

        【解决方案3】:

        这里有一个函数可以做到这一点

        M = [[1,2,3],[4,5,6]]
        
        def matrixSummary( M ):
            rowSums=[]
            for row in M:
                rowSums.append( sum( row ))
            return sum( rowSums )
        matrixSummary( M )
        // Result: 21 //
        

        看起来 CoDEmanX 有一个不错的列表理解版本

        【讨论】:

        • 如果我没记错的话,这是一个生成器表达式。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        相关资源
        最近更新 更多