假设我有这样一个列表元组:解开一个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