【问题标题】:How to print list of numbers in square matrix?如何打印方阵中的数字列表?
【发布时间】:2020-10-22 12:35:08
【问题描述】:
l1 = [4, 8, 12,16,3,7,11,15,2,6,10,14,1,5,9,13]

输出:

[4,8,12,16]
[3,7,5,11]
[1,6,10,14]
[1,5,9,13]

m =4
n=4
tmp = [[0]*m]*n
a = 0
for i in range(m):
    for j in range(n):
       tmp[i][j] = l1[a]
       a += 1

未按要求的格式打印。 这里有什么问题?你能帮帮我吗?

【问题讨论】:

标签: python-3.x


【解决方案1】:

您可以通过以下理解列表实现此目的:

list1 = [4, 8, 12,16,3,7,11,15,2,6,10,14,1,5,9,13]
[list1[x:x+4] for x in list(range(0,len(list1),4))]

输出

[[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]]

【讨论】:

    【解决方案2】:

    代码的问题在于数组初始化部分。 tmp = [[0]*m]*n 这将创建一个公共内存地址,您对一个索引所做的任何更改也将反映到另一个索引。

    所以要初始化列表,您可以使用以下代码

    tmp = [[0 for _ in range(m)] for _ in range(n)]
    

    @Sebastien D 已经分享了简单的方法

    【讨论】:

      【解决方案3】:

      您只需要更改初始化tmp 矩阵的方式

      tmp = [[[0] for _ in range(m)] for _ in range(n)]
      

      【讨论】:

        【解决方案4】:

        m 的步长遍历初始列表,每次都将m 元素列表附加到最终列表中,其中m 是每行中的元素数。

        t = []
        for i in range(0, len(l1), m):
            t.append(l1[i:i+m])
        print(t)
        

        【讨论】:

        • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量也更好
        猜你喜欢
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多