2010-07-10 51 views
6

假設我有這樣一個列表元組:解開一個1元組的長度的列表1

>>> t = [("asdf",)] 

我知道列表始終包含一個1元組。目前我這樣做:

>>> dummy, = t 
>>> value, = dummy 
>>> value 
'asdf' 

是否有一個更短,更優雅的方式來做到這一點?

回答

9
>>> t = [("asdf",)] 
>>> t[0][0] 
'asdf' 
16

嘗試

(value,), = t 

它比t[0][0]更好,因爲它也聲稱,您的列表中包含它究竟是1元組1的值。

+0

我剛剛測試過了,它不起作用。不幸的是,它並沒有脫離最初的列表。 – 2013-03-31 14:43:20

+0

問題中的示例有效。你究竟做了什麼? – Lior 2013-04-10 11:49:32

+0

我的歉意,我再次嘗試它,它的工作原理。我不確定爲什麼它以前不工作;我所能想到的就是我在'價值'之後離開了','。 – 2013-04-12 06:28:03

0

嘗試[(val,)] = t

In [8]: t = [("asdf",)] 

In [9]: (val,) = t 

In [10]: val 
Out[10]: ('asdf',) 

In [11]: [(val,)] = t 

In [12]: val 
Out[12]: 'asdf' 

我不認爲這是一個乾淨的方式去了解它。

val = t[0][0]是我最初的選擇,但它看起來有點醜。

[(val,)] = t也有效,但看起來也很醜。我想這取決於哪個更容易閱讀,什麼你想看起來不那麼難看,valt

我喜歡Lior的想法,解開列表和元組包含斷言。

In [16]: t2 = [('asdf',), ('qwerty',)] 

In [17]: [(val,)] = t2 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-17-73a5d507863a> in <module>() 
----> 1 [(val,)] = t2 

ValueError: too many values to unpack 
相關問題