gpt4 book ai didi

python - 如何 'unpack' Python 中的列表或元组

转载 作者:行者123 更新时间:2023-11-28 21:45:50 25 4
gpt4 key购买 nike

我正在编写一个 Python 程序来玩井字游戏,使用 Numpy 数组,其中“X”由 1 表示,“O”由 0 表示。该类包含一个在板上放置标记的函数:

import numpy as np

class Board():
def __init__(self, grid = np.ones((3,3))*np.nan):
self.grid = grid

def place_mark(self, pos, mark):
self.grid[pos[0],pos[1]] = mark

例如,

board = Board()
board.place_mark([0,1], 1)
print board.grid

产量

[[ nan   1.  nan]
[ nan nan nan]
[ nan nan nan]]

我想知道 place_mark 函数中的 pos[0], pos[1] 参数是否可以以某种方式被 的“解压”内容替换pos(它总是一个长度为 2 的列表)。在 Ruby 中,这将使用 splat 运算符完成:*pos,但这在 Python 中似乎不是有效语法。

最佳答案

在 Numpy 中,列表索引和多维索引之间存在差异。 self.grid[[0,1]] 相当于连接 self.grid[0]self.grid[1],每个3x1 数组,变成 3x2 数组。

如果您使用元组而不是列表进行索引,那么它将被正确解释为多维索引:self.grid[(0, 1)] 被解释为与 相同self.grid[0, 1].

有一个 * 运算符用于解包序列,但仅在函数参数的上下文中,至少在 Python 2 中是这样。因此,对于列表,您也可以这样做:

def place_mark(self, mark, x, y):
self.grid[x, y] = mark

place_mark(1, *[0, 1])

注意。 (Expanded usefulness of * in Python 3)

关于python - 如何 'unpack' Python 中的列表或元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com