簡體   English   中英

如何在Python中“解壓”列表或元組

[英]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])

NB。 (在Python 3中擴展了*用途)

正如Lukasz所建議的那樣,輸入參數應該是一個元組。 在此示例中,可以將其轉換為一個:

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

我的問題不一樣。解開元組的pythonic方法是什么? 因為pos並不構成函數的輸入參數,而是構成二維數組的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM