我正在使用Python 3
我有一个单板,我必须存储单元格,每个单元格都有一个坐标,需要存储3个值。我使用了一个字典,其中键等于单元格的坐标,值是一个包含3个元素的列表,用于存储所需的值。 当电路板变大并存储大量键/值对时,获取和读取这些值是否会很快? 或者在速度方面哪种方法更有效?
亚历
编辑:
每个单元格需要的3个值是零或1。我有一个元组,其中包含电路板的尺寸,一个包含所有单元格位置的元组,其值为1作为第一个值,一个包含所有单元格位置的元组,其值应为1作为第二个值value和一个元组,其中包含值为1的所有单元格位置作为第三个值:
tuple1是一个元组,其中包含元组,每个元组表示具有1作为第一个值的单元格的位置,frozenset包含元组,每个元组表示具有1作为第二个值的单元格的位置,而tuple2包含元组,每个代表具有1作为第三个值(在列表中)的单元格的位置
代码:
board = {}
for row in range(dimension[0]):
for col in range(dimension[1]):
board[(row,col)] = [0,0,0] #default
for x in tuple1:
board[x][0] = 1
for x in frozenset:
board[x][1] = 1
for x in tuple2:
board[x][2] = 1
return board
现在查找键和值是否很快?
EDIT2:这是设置这样字典的最快方法吗?
答案 0 :(得分:2)
numpy
如果您正在寻找性能,我认为您应该认真考虑使用布尔值numpy
。具有元组值的二维板可以看作3D矩阵:
import numpy as np
width, height = 5, 5
board = np.full((width,height,3), False, dtype = bool)
tuple1 = ((1,2), (3,4), (0,2))
for i,j in tuple1:
board[i,j,0] = True
print(board)
# [[[False False False]
# [False False False]
# [ True False False]
# [False False False]
# [False False False]]
# [[False False False]
# [False False False]
# [ True False False]
# [False False False]
# [False False False]]
# [[False False False]
# [False False False]
# [False False False]
# [False False False]
# [False False False]]
# [[False False False]
# [False False False]
# [False False False]
# [False False False]
# [ True False False]]
# [[False False False]
# [False False False]
# [False False False]
# [False False False]
# [False False False]]]
如果您无法使用numpy
,则只需使用标准列表:
width, height = 5, 5
board = [[[0, 0, 0] for j in range(width)] for i in range(height)]
tuple1 = ((1,2), (3,4), (0,2))
for i,j in tuple1:
board[i][j][0] = 1
from pprint import pprint
pprint(board)
[[[0, 0, 0], [0, 0, 0], [1, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [1, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [1, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]]
我认为使用词典没有任何优势。它只会改变你的细胞并使显示更难。