IPr*_*ory 9 python arrays numpy multidimensional-array python-2.7
我想用这样的东西:
class Board():
...
def __getitem__(self, y, x):
return self.board[y][x]
Run Code Online (Sandbox Code Playgroud)
但不幸的是,当我打电话的时候:
board[x][y]
Run Code Online (Sandbox Code Playgroud)
我明白了:
TypeError: __getitem__() takes exactly 3 arguments (2 given)
Bre*_*arn 14
当你这样做时,board[x][y]你将进行两次调用,__getitem__因为你正在进行两次单独的访问:[x]是一个而[y]另一个是.没有办法直接处理这个问题__getitem__; 您必须board[x]返回某种子对象,您可以使用[y]它来获取单个项目.你可能想要的是__getitem__接受一个元组:
def __getitem__(self, tup):
y, x = tup
return self.board[y][x]
Run Code Online (Sandbox Code Playgroud)
然后做:
board[x, y]
Run Code Online (Sandbox Code Playgroud)
(注意你有x和y的顺序切换__getitem__和board[x][y]---是故意的吗?)
您可能需要考虑使用以下语法:
board[(x, y)]
Run Code Online (Sandbox Code Playgroud)
它不太漂亮,但它允许您简单地拥有多维数组。实际上是任意数量的维度:
board[(1,6,34,2,6)]
Run Code Online (Sandbox Code Playgroud)
通过将 board 设为 defaultdict,您甚至可以拥有稀疏字典:
board[(1,6,34,2,6)]
>>> from collections import defaultdict
>>> board = defaultdict(lambda: 0)
>>> board[(1,6,8)] = 7
>>> board[(1,6,8)]
7
>>> board[(5,6,3)]
0
Run Code Online (Sandbox Code Playgroud)
如果你想要更高级的东西,你可能想要NumPy。