2010-07-10 29 views
6

Giả sử tôi có một tuple trong một danh sách như thế này:giải nén 1-tuple trong một danh sách có độ dài 1

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

Tôi biết rằng danh sách này luôn luôn chứa một 1-tuple. Hiện tại tôi làm điều này:

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

Có cách nào ngắn hơn và thanh lịch hơn để thực hiện việc này không?

Trả lời

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

Hãy thử

(value,), = t 

Đó là tốt hơn so với t[0][0] bởi vì nó cũng khẳng định rằng danh sách của bạn có chứa chính xác 1 tuple với 1 giá trị trong đó.

+0

Tôi vừa thử nghiệm điều này và không hoạt động. Thật không may nó không thoát khỏi danh sách ban đầu. –

+0

Ví dụ trong câu hỏi hoạt động. Chính xác thì bạn đã cố gắng làm gì? – Lior

+0

Lời xin lỗi của tôi, tôi đã thử lại và nó hoạt động. Tôi không chắc tại sao nó không hoạt động trước đó; tất cả những gì tôi có thể nghĩ là tôi để lại ',' sau giá trị '. –

0

Hãy thử [(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' 

Tôi không nghĩ rằng có một cách sạch sẽ để đi về nó.

val = t[0][0] là lựa chọn ban đầu của tôi, nhưng có vẻ xấu xí.

[(val,)] = t cũng hoạt động nhưng trông xấu xí quá. Tôi đoán nó phụ thuộc vào đó là dễ dàng hơn để đọc và những gì bạn muốn nhìn ít xấu xí, val hoặc t

Tôi thích ý tưởng của Lior rằng giải nén danh sách và bộ chứa một khẳng định.

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 
Các vấn đề liên quan