【问题标题】:How to create a 2d list of rows and columns?如何创建行和列的二维列表?
【发布时间】:2020-03-27 04:42:20
【问题描述】:

我希望能够像这样创建一个方形列表:

#[[   ],[   ],[   ]
# [   ],[   ],[   ]
# [   ],[   ],[   ]]

使用此代码:

GRID_SIZE = 3
def placeMines():
    L = []
    for x in range(GRID_SIZE):
        for y in range(GRID_SIZE):
            L.append([])
    print(L)

但是,我希望能够使列表在到达列表的行号(在本例中为 3)时转到下一行。有点像 \nfor 字符串。

【问题讨论】:

标签: python list nested-lists


【解决方案1】:

你可以使用:

s = '[' + '\n '.join(','.join(['[   ]'] * GRID_SIZE)  for _ in range(GRID_SIZE)) + ']'
print(s)

输出:

[[   ],[   ],[   ]
 [   ],[   ],[   ]
 [   ],[   ],[   ]]

【讨论】:

    【解决方案2】:

    由于 kederrac 的回答在将问题与字符串进行比较时过于直白,我在这里描述了列表数据结构的创建。

    您的视觉示例和代码都描述了一个 (9,1) 列表,我猜这不是您想要的。根据您的描述,我相信您需要以下物品之一。

    如果视觉示例中的括号确实代表其他列表,则像这样的 (3,3,1) 列表:

    #[[[],[],[]],
    # [[],[],[]],
    # [[],[],[]]].
    

    如果您的括号不是真正的列表,但每个位置将采用的值,则或像这样的 (3,3) 列表:

    #[[0, 0, 0],
    # [0, 0, 0],
    # [0, 0, 0]].
    

    对于这两种情况,您都可以使用嵌套列表推导,如下所示:

    对于第一种情况:

    L = [[[] for _ in range(GRID_SIZE)] for _ in range(GRID_SIZE)]
    

    对于第二种情况:

    L = [[0 for _ in range(GRID_SIZE)] for _ in range(GRID_SIZE)]
    

    【讨论】:

      【解决方案3】:

      您可以使用内置的divmod() 函数来做一些数学运算,如下所示:

      from pprint import pprint
      
      GRID_SIZE = 3
      
      def placeMines():
          L = []
          for i in range(GRID_SIZE**2):
              r, c = divmod(i, GRID_SIZE)
              if c == 0:  # New row?
                  L.append([])
              L[-1].append(['   '])
          pprint(L)
      
      placeMines()
      

      输出:

      [[['   '], ['   '], ['   ']],
       [['   '], ['   '], ['   ']],
       [['   '], ['   '], ['   ']]]
      

      【讨论】:

        猜你喜欢
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        相关资源
        最近更新 更多