9

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

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

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

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

有没有更短更优雅的方法来做到这一点?

4

3 回答 3

23

尝试

(value,), = t

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

于 2010-07-10T14:36:44.297 回答
10
>>> t = [("asdf", )]
>>> t[0][0]
'asdf'
于 2010-07-10T14:36:53.080 回答
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也可以,但看起来也很丑。我想这取决于哪个更容易阅读以及你想让什么看起来不那么难看,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-31T14:58:49.183 回答