【问题标题】:More elegant way to create a 2D matrix in Python [duplicate]在 Python 中创建二维矩阵的更优雅的方法 [重复]
【发布时间】:2012-01-17 12:03:34
【问题描述】:

可能重复:
How to initialize a two-dimensional array in Python?

这部分代码我一直都是这样写的:每次需要的时候,我就用这个python代码:

for x in range(8):
        a.append([])
        for y in range(8):
            a[x].append(0)

但是,我想知道是否有办法美化这段代码。 我的意思是,你如何在python中创建一个二维矩阵,并用0填充它?

【问题讨论】:

  • 这个问题是声明和初始化二维数组很好解释here

标签: python loops matrix


【解决方案1】:

使用nested list comprehensions:

a = [[0 for y in range(8)] for x in range(8)]

相当于

a = []
for x in range(8):
    row = []
    for y in range(8):
        row.append(0)
    a.append(row)

【讨论】:

    【解决方案2】:

    试试这个:

    a = [[0]*8 for _ in xrange(8)]
    

    它使用列表推导以及 * 运算符可应用于列表以使用给定元素的 n 副本填充它们的事实。

    或者更好的是,编写一个通用函数来返回给定大小的矩阵:

    # m: number of rows, n: number of columns
    def create_matrix(m, n):
        return [[0]*n for _ in xrange(m)]
    
    a = create_matrix(8, 8)
    

    【讨论】:

      【解决方案3】:

      列表理解更简洁。

      a = [[0 for i in xrange(8)] for i in xrange(8)]
      print a
      

      如果您要对数组进行数值计算,也可以使用numpy arraysNumpy.zeros 函数创建一个多维零数组。

      import numpy as np
      
      a = np.zeros((8,8))
      

      【讨论】:

        【解决方案4】:

        您可以使用list comprehensions。由于您并不真正关心range 提供的值,因此您可以使用_,它通常代表一个不感兴趣的值。

        >>> z = [[0 for _ in range(8)] for _ in range(8)]
        >>> import pprint
        >>> pprint.pprint(z)
        [[0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0], 
         [0, 0, 0, 0, 0, 0, 0, 0]]
        

        列表推导式提供了一种简洁的方法来创建列表,而无需使用 map()、filter() 和/或 lambda。生成的列表定义往往比使用这些结构构建的列表更清晰。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-04
          • 2017-09-08
          • 1970-01-01
          • 2018-11-23
          • 2020-08-25
          • 2022-09-30
          • 2015-01-25
          相关资源
          最近更新 更多