【问题标题】:How do I print a 2d array in python如何在 python 中打印二维数组
【发布时间】:2016-11-27 08:42:56
【问题描述】:

我在为我的 Battleship 游戏打印此二维数组时遇到问题。

class Battleship:

    def __init__(self):
       self.__init__()

    def board(self, locate):
        locate = []
        for i in range(10):
            locate.append([])
            for j in range(10):
                locate[i].append(0)

        for i in range(10):
            for j in range(10):
                locate[i][j] = '%s,%s'%(i,j)
                print(locate)

我在这里找到了如何初始化数组:How to initialise a 2D array in Python? 这是我找到迭代二维数组的代码示例的地方,但它对我不起作用: Iterating over a 2 dimensional python list

你能给我一些帮助吗?

【问题讨论】:

标签: python arrays multidimensional-array


【解决方案1】:

您的字符串格式错误%s 是因为您的字符串ij 是整数,所以请使用%d

所以使用:

locate[i][j]='%d%d'%(i,j)

此外,以矩阵格式打印完整代码:

for i in range(10):
        s=''
        for j in range(10):
            locate[i][j] = '%d,%d'%(i,j)
            s+=locate[i][j]+' '
        print s

【讨论】:

  • 如果我使用一个会发生什么???我在你的提示中看到了使用一个,这就是我使用的原因。也许你应该更多地关注答案而不是它的美丽
  • 知道了,我没有完整阅读您的说明,只是略读抱歉:),这次在回答其他问题时遵守规则
【解决方案2】:
for i in range(10):
    for j in range(10):
        print(locate[i][j])`

这应该可以正常工作。

【讨论】:

  • 如果列表不是 10X10 怎么办?我认为你应该在那里使用 len(locate)
  • @DonatPants 这只是为了突出代码中的问题,当然你应该使用 len(localte)。
  • 我试过这个 [code] class Battleship: def __init__(self): self.__init__() def board(self, locate): locate = [] for i in range(10): locate.append([]) for j in range(10): locate[i][j].append(0) for i in range(10): for j in range(10): print(locate[i][ j]) [code] 还是不行
  • 如果您只想遍历列表,我认为使用索引没有用处。只是一个for elt in list: 然后do_something(elt) 似乎比for i in len(list): 好,然后是do_somethin(list[i])
【解决方案3】:

你想怎么打印?请提供有关输出格式的更多信息。

假设你想要那个格式,即xOy坐标(x,y):

在这个for循环中:

for i in range(10):
        locate.append([])
        for j in range(10):
            locate[i].append(0)

您的代码可能会因为这一行而失败:

locate[i].append(0)

这里的问题是你的定位变量是一个二维数组,所以你可能想尝试一下:

locate[i][j].append(0)

否则,如果我没记错的话,你将不得不附加一个完整的列表

此外,您的最后一条语句“print(locate)”应该在 for 循环之外仅打印一次矩阵

【讨论】:

  • 因为 locate 是一个二维数组,那么 locate 的一个元素将是一个一维数组,所以 locate[i] 是一个一维数组,因此向它添加一个元素是非常好的。此外,在 Python 中,列表可以包含不同类型的数据。
【解决方案4】:

这是我为生成乘法板而编写的一些代码,以演示如何打印未知大小的二维数组

l = [] # empty list
a,b = 10,10 # size of board aXb
for i in range(1,a+1): # generate board
    temp = []
    for j in range(1,b+1):
        temp.append(i*j)
    l.append(temp)

for i in l: # print the board
    print i

输出是

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
[4, 8, 12, 16, 20, 24, 28, 32, 36, 40]
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
[6, 12, 18, 24, 30, 36, 42, 48, 54, 60]
[7, 14, 21, 28, 35, 42, 49, 56, 63, 70]
[8, 16, 24, 32, 40, 48, 56, 64, 72, 80]
[9, 18, 27, 36, 45, 54, 63, 72, 81, 90]
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

这是另一种打印方式

for i in l: # print the board
    for j in i:
        print j,
    print

输出

1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

【讨论】:

    【解决方案5】:

    首先,让我们清理 2D-list 的创建:

    locate = [[str(i)+","+str(j) for j in range(10)] for i in range(10)]
    

    然后,遍历数组并打印存储在每种情况下的值:

    for locate_i in locate:
        for locate_i_j in locate_i:
            print locate_i_j
    

    解释:当您在列表中使用 for X 时,X 将具有列表中每个元素的值。因此,我们的locate_i 是给定 i 索引的每个子列表。当我们遍历这个列表时,我们会得到内容 "%s,%s"%(i,j)

    【讨论】:

      【解决方案6】:

      你有多种印刷形式

      使用 numpy

      import numpy as np
      print(np.matrix(matrix))
      

      使用 pprint

      import pprint
      pprint.pprint(matrix)
      

      【讨论】:

      • 如果矩阵足够大(超过 5 列),它们都不能正确打印矩阵
      【解决方案7】:

      这是我用来很好地打印列表的最简单方法。

      for row in board:
          print(' '.join(row))
      

      【讨论】:

      • 唯一的问题是字符必须是字符串。
      • 在问题的上下文中row 是什么?
      • 我建议for row in board: print(*row)(由于注释格式限制而被压缩在一行中)使其适用于非字符串元素。 *row 解压row.
      猜你喜欢
      • 2017-05-22
      • 2021-11-20
      • 2013-07-26
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      相关资源
      最近更新 更多