在长度为1的列表中解包1元组

时间:2010-07-10 14:34:10

标签: python list tuples iterable-unpacking

假设我在这样的列表中有一个元组:

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

我知道列表总是包含一个1元组。目前我这样做:

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

有更短更优雅的方法吗?

3 个答案:

答案 0 :(得分:19)

尝试

(value,), = t

它比t[0][0]更好,因为它还断言你的列表中只包含1个元组,其中包含1个值。

答案 1 :(得分:10)

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

答案 2 :(得分: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