[英]How to 'unpack' a list or tuple in Python
我正在編寫一個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]
參數place_mark
能以某種方式由pos
的“未place_mark
”內容(始終是長度為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])
正如Lukasz所建議的那樣,輸入參數應該是一個元組。 在此示例中,可以將其轉換為一個:
def place_mark(self, pos, mark):
self.grid[tuple(pos)] = mark
我的問題不一樣。解開元組的pythonic方法是什么? 因為pos
並不構成函數的輸入參數,而是構成二維數組的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.