【问题标题】:Initialize and Populate 2 Dimensional Array in Python from other Lists从其他列表初始化和填充 Python 中的二维数组
【发布时间】:2019-01-25 02:14:48
【问题描述】:

我想创建二维数组并用以下信息填充它。

n = 7  
j = [0, 1, 2, 3, 4, 5, 6]  
k = [0, 2, 4, 3, 3, 2, 1]  
l = [0 , 46, 52, 30, 36 ,56, 40]  

所以,列表 L 的第一个列表应该是 b [0,0,0],列表 L 的第二个列表应该是 [1,2,46],列表 L 的第三个应该是列表 [2, 4, 52] 等等。但它不起作用,它不断覆盖这些值

#!/usr/bin/python3.6

from operator import itemgetter

n = 7
j = [0, 1, 2, 3, 4, 5, 6]
k = [0, 2, 4, 3, 3, 2, 1]
l = [0 , 46, 52, 30, 36 ,56, 40]

L =  [[0]*3]*n

print(L)

x = 0
y = 0
z = 0

while x < len(j):
  L[x][0] = j[x]
  x =  x + 1

while y < len(k):
  L[y][1] = k[y]
  y  = y + 1

while z < len(l):
  L[z][2] = l[z]
  z  = z + 1


print (L)

当前输出为
L 的初始化,没关系
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [ 0, 0, 0]]

和修改后的L,这是非常错误的
[[6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40], [ 6、1、40]]

【问题讨论】:

    标签: python-3.x list multidimensional-array


    【解决方案1】:

    首先:

    L = [[0]*3]*n
    

    是初始化 2D 列表的错误方法。如果我将l[0][0] 设置为1,看看会发生什么:

    n = 7
    L = [[0]*3]*n
    L[0][0] = 1
    print(L)
    

    输出:

    [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
    

    要正确初始化 2D 列表,请执行以下操作:

    L = [[0] * 3 for _ in range(n)]
    

    如果你把它改成这个,你的代码就可以工作了。

    但实际上,您的问题可以通过更简单的方式解决。只需使用zip

    j = [0, 1, 2, 3, 4, 5, 6]  
    k = [0, 2, 4, 3, 3, 2, 1]  
    l = [0, 46, 52, 30, 36, 56, 40]
    
    result = [list(x) for x in zip(j, k, l)]
    print(result)
    

    输出:

    [[0, 0, 0],
     [1, 2, 46],
     [2, 4, 52],
     [3, 3, 30],
     [4, 3, 36],
     [5, 2, 56],
     [6, 1, 40]]
    

    【讨论】:

    • 谢谢,我可以再解压到三个列表吗?
    • @Wael 是的。 j, k, l = map(list, zip(*result)).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2013-11-21
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多