附加到Python中的多维数组

时间:2016-04-06 15:18:35

标签: python loops multidimensional-array

我有这段代码:

philips_trousers = []
for i in range(0, 5):
  philips_trousers.append(["T"] * 5)
  philips_trousers.append(["R"] * 5)
  philips_trousers.append(["O"] * 5)
  philips_trousers.append(["U"] * 5)
  philips_trousers.append(["S"] * 5)
  philips_trousers.append(["E"] * 5)
  philips_trousers.append(["R"] * 5)
  philips_trousers.append(["S"] * 5)
print philips_trousers

其中输出以下内容:

[['T', 'T', 'T', 'T', 'T'], ['R', 'R', 'R', 'R', 'R'], ['O', 'O', 'O', 'O', 'O'], ['U', 'U', 'U', 'U', 'U'], ['S', 'S', 'S', 'S', 'S'], ['E', 'E', 'E', 'E', 'E'], ['R', 'R', 'R', 'R', 'R'], ['S', 'S', 'S', 'S', 'S'], ['T', 'T', 'T', 'T', 'T'], ['R', 'R', 'R', 'R', 'R'], ['O', 'O', 'O', 'O', 'O'], ['U', 'U', 'U', 'U', 'U'], ['S', 'S', 'S', 'S', 'S'], ['E', 'E', 'E', 'E', 'E'], ['R', 'R', 'R', 'R', 'R'], ['S', 'S', 'S', 'S', 'S'], ['T', 'T', 'T', 'T', 'T'], ['R', 'R', 'R', 'R', 'R'], ['O', 'O', 'O', 'O', 'O'], ['U', 'U', 'U', 'U', 'U'], ['S', 'S', 'S', 'S', 'S'], ['E', 'E', 'E', 'E', 'E'], ['R', 'R', 'R', 'R', 'R'], ['S', 'S', 'S', 'S', 'S'], ['T', 'T', 'T', 'T', 'T'], ['R', 'R', 'R', 'R', 'R'], ['O', 'O', 'O', 'O', 'O'], ['U', 'U', 'U', 'U', 'U'], ['S', 'S', 'S', 'S', 'S'], ['E', 'E', 'E', 'E', 'E'], ['R', 'R', 'R', 'R', 'R'], ['S', 'S', 'S', 'S', 'S'], ['T', 'T', 'T', 'T', 'T'], ['R', 'R', 'R', 'R', 'R'], ['O', 'O', 'O', 'O', 'O'], ['U', 'U', 'U', 'U', 'U'], ['S', 'S', 'S', 'S', 'S'], ['E', 'E', 'E', 'E', 'E'], ['R', 'R', 'R', 'R', 'R'], ['S', 'S', 'S', 'S', 'S']]

到目前为止,您可能正在考虑这么好,但我想知道一些事情 - 为什么Python会像它一样填充philips_trousers?也就是说,为什么append()函数会创建格式为['T', 'T', 'T', 'T', 'T']['R', 'R', 'R', 'R', 'R']等的新子数组,而不是:['T', 'R', 'O', 'U', 'S', 'E', 'R', 'S']

2 个答案:

答案 0 :(得分:1)

["T"] + ["T"]["T", "T"]相同。乘法只是添加了几次。因此,["T"] * 5["T", "T", "T", "T", "T"] 1 相同。您在最终列表中看到的是几个这样的列表。如果你想要一堆["T", "R", "O", ...],你可以这样做:

philips_trousers = []

for _ in range(5):
    philips_trousers.append(list("TROUSERS"))

print philips_trousers

这几乎是Remuze答案的缩短版本。

1 不要将列表乘法与可变对象一起使用,因为列表中的每个项目都是同一个对象。这意味着修改一个将全部修改它们。

答案 1 :(得分:0)

["T"] * 5首先转换为[['T'],['T'],['T'],['T'],['T']],然后将其附加到空数组。对于其他每个字母都会发生同样的情况。

要获得您正在寻找的功能,您应该尝试这样做:

philipsTrousers = []
for i in range(0, 5):
  philipsTrousers.append(["T","R","O","U","S","E","R","S"])
print philipsTrousers