假設我有這樣一個列表元組:解開一個1元組的長度的列表1
>>> t = [("asdf",)]
我知道列表始終包含一個1元組。目前我這樣做:
>>> dummy, = t
>>> value, = dummy
>>> value
'asdf'
是否有一個更短,更優雅的方式來做到這一點?
假設我有這樣一個列表元組:解開一個1元組的長度的列表1
>>> t = [("asdf",)]
我知道列表始終包含一個1元組。目前我這樣做:
>>> dummy, = t
>>> value, = dummy
>>> value
'asdf'
是否有一個更短,更優雅的方式來做到這一點?
>>> t = [("asdf",)]
>>> t[0][0]
'asdf'
嘗試
(value,), = t
它比t[0][0]
更好,因爲它也聲稱,您的列表中包含它究竟是1元組1的值。
嘗試[(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
也有效,但看起來也很醜。我想這取決於哪個更容易閱讀,什麼你想看起來不那麼難看,val
或t
我喜歡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
我剛剛測試過了,它不起作用。不幸的是,它並沒有脫離最初的列表。 – 2013-03-31 14:43:20
問題中的示例有效。你究竟做了什麼? – Lior 2013-04-10 11:49:32
我的歉意,我再次嘗試它,它的工作原理。我不確定爲什麼它以前不工作;我所能想到的就是我在'價值'之後離開了','。 – 2013-04-12 06:28:03