2012-09-19 29 views
4

我喜歡使用元組拆包對作業的右手邊:元組拆包列表建設(python3)

>>> a = [3,4] 

>>> b = [1,2,*a] 
    File "<stdin>", line 1 
SyntaxError: can use starred expression only as assignment target 

當然,我可以這樣做:

>>> b = [1,2] 
>>> b.extend(a) 
>>> b 
[1, 2, 3, 4] 

但我考慮這個麻煩。我在想什麼?一個簡單的方法? 它計劃有這個嗎?或者是否有明確不在語言中的理由?

問題的一部分是,所有的容器類型都使用一個構造函數,該構造函數需要一個迭代並且不接受* args參數。我可以進行子類化,但是這對於其他人應該閱讀的腳本引入了一些非pythonic噪聲。

回答

1

這在PEP 448描述固定在Python 3.5:

>>> a=[3,4] 
>>> b=[1,2,*a] 
>>> b 
[1, 2, 3, 4] 
5

您有幾種選擇,但最好的一種是使用列表連接(+):

b = [1,2] + a 

如果你真的希望能夠使用*語法,你可以創建你自己的名單包裝:

def my_list(*args): 
    return list(args) 

那麼你可以稱其爲:

a = 3,4 
b = my_list(1,2,*a) 

我想這裏的好處是,a不需要是一個列表,它可以是任何序列類型。

7

您可以使用添加操作:

a = [3, 4] 
b = [1, 2] + a 
+1

它必須是那麼簡單。這方面沒有任何問題。感謝您指出明顯。 *嘆* – cfi