2015-06-09 24 views
8

我不確定大小的列表:解壓目錄到元組的中間

l = [...] 

我要解開這個名單到具有其他元素的元組,但低於失敗:

t = ("AA", "B", *l, "C") 

如何形成以下內容?

t = ("AA", "B", l[0], ..., l[:-1], "C") 

編輯:這也將是不錯的做了切片[A:B]只:

t = ("AA", "B", l[a], ..., l[b], "C") 

回答

1

對於Python 3.5,你現在可以使用你的第一種方法:

>>> l = [1, 2, 3] 
>>> t = ("AA", "B", *l, "C") 
>>> t 
('AA', 'B', 1, 2, 3, 'C') 

您可以使用片,就像你所期望的:

>>> ("AA", "B", *l[:-1], "C") 
('AA', 'B', 1, 2, 'C') 

的相關PEP,對參考:PEP448

8

不能代這樣的價值觀解壓到一個元組(尚 - 見PEP 448)因爲拆箱只會發生在左側的表達式上,或者如錯誤信息所示,分配目標

另外,賦值目標應該有有效的Python變量。在你的情況下,你也有元組中的字符串文字。

但是你可以建立你想要的元組,通過連接三元組,這樣

>>> l = [1, 2, 3, 4] 
>>> ("A", "B") + tuple(l[:-1]) + ("C",) 
('A', 'B', 1, 2, 3, 'C') 
>>> ("A", "B") + tuple(l) + ("C",) 
('A', 'B', 1, 2, 3, 4, 'C') 
+0

這是按預期工作,謝謝,雖然我認爲*符號應該支持糖,因爲噸他很醜。我想我可以寫一個函數來完成它。 – Tommy

0

可以flatten the list,然後轉換成元組。

>>> import itertools 
>>> l=[1,2,3,4] 
>>> t = ('A', 'B', l, 'C') 
>>> t 
('A', 'B', [1, 2, 3, 4], 'C') 
>>> tuple(itertools.chain.from_iterable(t)) 
('A', 'B', 1, 2, 3, 4, 'C') 
>>> 
+0

當列表包含多個字符項目(如「abc」)時,這不起作用。 – Tommy

+0

沒錯。這是正確的行爲。列表和字符串都是可迭代的。因此,字符串也被擴展,類似於列表。我的錯。 – shantanoo