你能把多维数组的位置存储在变量中吗

  • 本文关键字:存储 变量 位置 数组 python
  • 更新时间 :
  • 英文 :


我正在尝试编写一个rubix立方体解算器,我想重复调用同一条边来检查其中的信息。然而,三维区域的位置占用了很多空间,我想将重复使用的位置放入一个变量中,这样我就可以调用该变量,而不是一遍又一遍地重写位置。

这就是我的rubix立方体的样子:

rubixCube = [
[["G","G","Y"], ["R","B","O"], ["R","R","O"]],
[["G","O","O"], ["O","Y","G"], ["R","B","B"]],
[["Y","W","Y"], ["R","O","O"], ["O","W","W"]],
[["B","B","W"], ["B","W","G"], ["G","W","R"]],
[["B","Y","R"], ["Y","R","W"], ["G","Y","B"]], 
[["O","G","W"], ["B","G","R"], ["Y","Y","W"]]
]

这是我反复调用的一个位置的例子:

if(rubixCube[0][0][1] == "W"):

我能写一些大致像这样的东西吗:

position = [0][0][1]
if(rubixCube[position] == "W"):

如果使用numpy数组

import numpy as np
rubixCube = np.array([
[["G","G","Y"], ["R","B","O"], ["R","R","O"]],
[["G","O","O"], ["O","Y","G"], ["R","B","B"]],
[["Y","W","Y"], ["R","O","O"], ["O","W","W"]],
[["B","B","W"], ["B","W","G"], ["G","W","R"]],
[["B","Y","R"], ["Y","R","W"], ["G","Y","B"]],
[["O","G","W"], ["B","G","R"], ["Y","Y","W"]]
])

然后可以使用元组对其进行索引

pos = (0, 0, 1)
print(rubixCude[pos])

如果您愿意安装numpy,那么这将是处理多维数组的标准方法。

如果你想保留在标准库中以避免安装额外的包,你可以在现有嵌套列表的顶部创建一个索引器类,这将允许你使用元组(或列表(来获取和设置元素。

class NdIndexer:
def __init__(self, arr):
self.arr = arr
def __getitem__(self, index):
val = self.arr
for i in index:
val = val[i]
return val
def __setitem__(self, index, value):
val = self.arr
for i in index[:-1]:
val = val[i]
val[index[-1]] = value

然后你可以做:

rubixCube = [
[["G","G","Y"], ["R","B","O"], ["R","R","O"]],
[["G","O","O"], ["O","Y","G"], ["R","B","B"]],
[["Y","W","Y"], ["R","O","O"], ["O","W","W"]],
[["B","B","W"], ["B","W","G"], ["G","W","R"]],
[["B","Y","R"], ["Y","R","W"], ["G","Y","B"]], 
[["O","G","W"], ["B","G","R"], ["Y","Y","W"]]
]
cube = NdIndexer(rubixCube)
position = (0,0,1)
# getting
print(rubixCube[0][0][1])  # prints: G
print(cube[position])  # prints: G
# setting
cube[position] = "X"
print(rubixCube[0][0][1])  # prints: X
print(cube[position])  # prints: X

最新更新