Python 3.x 从其他列表中初始化并填充Python中的二维数组

Python 3.x 从其他列表中初始化并填充Python中的二维数组,python-3.x,list,multidimensional-array,Python 3.x,List,Multidimensional Array,我想创建二维数组并用以下信息填充它 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 impor

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

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)
#/usr/bin/python3.6
从运算符导入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
印刷品(L)
x=0
y=0
z=0
当x
电流输出为
初始化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],[6,1,40]。

首先:

L = [[0]*3]*n
是初始化二维列表的错误方法。如果我将
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]]
[[0, 0, 0],
 [1, 2, 46],
 [2, 4, 52],
 [3, 3, 30],
 [4, 3, 36],
 [5, 2, 56],
 [6, 1, 40]]
要正确初始化二维列表,请执行以下操作:

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)
输出:

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

谢谢,我能把它再解压缩到三个列表吗?@Wael-Yep
j,k,l=map(列表,zip(*result))