Python 您能否将多维数组的位置存储在变量中?

Python 您能否将多维数组的位置存储在变量中?,python,Python,我正在尝试编写一个rubix多维数据集解算器,我想反复调用同一个edge来检查其中的信息。然而,三维区域的位置占据了很多空间,我想把我反复使用的位置放到一个变量中,这样我就可以调用变量,而不是反复重写位置 这就是我的rubix多维数据集的外观: rubixCube = [ [["G","G","Y"], ["R","B","O"], ["R"

我正在尝试编写一个rubix多维数据集解算器,我想反复调用同一个edge来检查其中的信息。然而,三维区域的位置占据了很多空间,我想把我反复使用的位置放到一个变量中,这样我就可以调用变量,而不是反复重写位置

这就是我的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
,那么这将是处理多维数组的标准方法

如果您希望保留在标准库中,以避免安装其他软件包,那么可以在现有嵌套列表的顶部创建一个indexer类,这将允许您使用该位置的元组(或列表)获取和设置元素

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

我有点不明白你为什么要这么做?你是说写出
rubixCube[0][0][1]
会占用很多空间吗?你是说记忆吗?你的意思是这会让你的代码看起来乱七八糟吗?这是一个简短、最正确、最快速的工作过程solution@alani奥巴马的回答也是很好的。它避免了将numpy作为依赖项拉入,并提供了相同的功能。我认为在这里演示这两个选项很好。这是一个很好的答案。如果我不需要
numpy
中的任何其他功能,我更喜欢这个答案。(为我之前(愚蠢的)评论感到抱歉。)@Steve没有看到评论,但不管是什么,别担心。我说过你的答案是第一个答案的重复,显然不是。