我正在尝试创建一个多维列表。 输入将是:
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
答案 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]]