2010-07-10 56 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 
相关问题