我在python中初始化一个2D数组时遇到了问题。我想要一个6x6数组,我做到了
arr = [[None]*6]*6
但当我这么做的时候:
>>> arr[1][2]=10
>>> arr
[[None, None, 10, None, None, None], [None, None, 10, None, None, None], [None, None, 10, None, None, None], [None, None, 10, None, None, None], [None, None, 10, None, None, None], [None, None, 10, None, None, None]]
注意我只设置了一个条目,并且它在所有行上都是"复制的"。有什么问题吗?我认为这与它引用了同一个列表有关,但是我该如何解决这个问题呢?
我想
for key, _ in algos.items():
algoData[key] = []
for i in range(0,6):
algoData[key].append([])
for j in range(0,6):
algoData[key][i].append(None)
工作,但它似乎很长,只是初始化一个空的6x6数组,如果我想要一个10000x10000数组,这将是非常低效的?
- 更新**
我也可以初始化一个二维数组的字典吗?我有一个字典:
algos = { "FIFO": ..., "LRU": ..., "Random": ... }
我想初始化一个字典如下:
algoData = { "FIFO": 2D arr, "LRU": 2D arr, "Random": 2D arr }
4条答案
按热度按时间mm9b1k5b1#
@卡梅隆建议你使用NumPy来处理数值数据数组是正确的。对于你问题的第二部分,~Niklas B.建议使用
defaultdict
是正确的。没有讨论的是 * 为什么 *
[[None]*6]*6
行为奇怪。答案是
[None]*6
创建了一个包含6个None
的列表(正如您所期望的),但是[list]*6
并没有创建list
的6个独立副本--它创建了对同一个list
的6个引用副本。vuktfyat2#
使用列表解析,你可以说:
然后
arr[1][2] = 10
就可以正常工作了。不过,这并不是一件很正常的事情。你打算用嵌套列表做什么呢?可能有更好的方法。例如,使用numpy包可以更容易地处理数组。y53ybaqx3#
w8f9ii694#
你可以尝试用零初始化一个数组,然后把值推到相应的索引中。
返回维数为10*10且带零的black_array