在python中创建一个多维列表

时间:2016-09-07 17:55:59

标签: python arrays multidimensional-array

我正在尝试创建一个多维列表。 输入将是:

L1 = [2,3,4]
L2 = [5,6,7]

输出为x ** y,其中x来自L1,x来自L2

L3 = [[32,64,128],[243,729,2187],[1024,4096,16384]]

我的代码如下:

L1 = [2,3,4]
L2 = [5,6,7]

L3 = [[None] * len(L1)] * len(L2)
c=0
for x in L1:
    d=0
    for y in L2:
        L3[c][d] = x ** y
        d = d+1
    c = c+1

print L3

这里的输出是:

[[1024,4096,16384],[1024,4096,16384],[1024,4096,16384]]

调试时我知道:

在分配给“L3 [0] [0]”时,其分配值为L3 [0] [0],L3 [1] [0],L3 [2] [0]。它应分配九次。在每次任务期间,它分配到3个地方。我没有得到它的工作方式。

我试图打印

id(L3[0])
id(L3[1])
id(L3[2])

并且所有都打印相同的内存位置地址。

是否因为相同的内存地址将值一次传递到3个位置(x ** y的值同时进入L3 [0] [0],L3 [1] [0],L3 [2] [0]

有人可以帮助我解决这个问题。

提前致谢, SRP

2 个答案:

答案 0 :(得分:3)

也许这就是你想要的?

[[x**y for y in L2] for x in L1]
  

[[32,64,128],[243,729,2187],[1024,4096,16384]]

答案 1 :(得分:0)

这就是我要做的事情

L1 = [2,3,4]
L2 = [5,6,7]
L3 = []
for x in L1:
    tmp = []
    for y in L2:
        tmp.append(x ** y)
    L3.append(tmp)

print L3
  

[[32,64,128],[243,729,2187],[1024,4096,16384]]