2013-03-07 38 views
11

Tiếp theo câu hỏi trước đây của tôi How to group list items into tuple?bằng Python, Làm cách nào để tham gia danh sách các bộ dữ liệu vào một danh sách?

Nếu tôi có một danh sách các hàng, ví dụ

a = [(1,3),(5,4)] 

Làm thế nào tôi có thể giải nén các tuples và định dạng lại nó vào một danh sách duy nhất

b = [1,3,5,4] 

tôi nghĩ rằng điều này cũng phải làm với chức năng iter, nhưng tôi thực sự không biết làm thế nào để làm điều này. Vui lòng làm sáng tỏ cho tôi.

+0

bản sao hoàn toàn chính xác ... – danodonovan

Trả lời

25
b = [i for sub in a for i in sub] 

Điều đó sẽ thực hiện thủ thuật.

+2

oh yeah, thật dễ dàng, tôi đang nghĩ gì ... – LWZ

+0

Đẹp nhất. Tôi đã phải suy nghĩ về nó trong một giây - _ "nơi phụ đã đến từ cuối cùng?" _ – bjd2385

+0

Tại sao/làm thế nào để làm việc này? – ruief

2
import itertools 
b = [i for i in itertools.chain(*[(1,3),(5,4)])] 
0

Chỉ cần lặp qua danh sách một và giải nén các tuple:

l = [] 
for x,y in a: 
    l.append(x) 
    l.append(y) 
7
In [11]: list(itertools.chain(*a)) 
Out[11]: [1, 3, 5, 4] 

Nếu bạn chỉ cần để lặp qua 1, 3, 5, 4, bạn có thể thoát khỏi những list() gọi.

+0

Điểm của 'itertools.chain.from_iterable' là gì nếu bạn có thể làm điều đó? – Volatility

+1

@Volatility: Đánh giá lười biếng? – NPE

+0

Hmm, đủ chính xác – Volatility

1

Một cách khác:

a = [(1,3),(5,4)] 
b = [] 

for i in a: 
    for j in i: 
     b.append(j) 

print b 

này sẽ chỉ xử lý các bộ dữ liệu bên trong danh sách (a) tho. Bạn cần thêm các câu lệnh if-else nếu bạn muốn phân tích cú pháp trong các biến lỏng lẻo, như;

a = [(1,3),(5,4), 23, [21, 22], {'somevalue'}] 
b = [] 

for i in a: 
    if type(i) == (tuple) or type(i) == (list) or type(i) == (set): 
     for j in i: 
      b.append(j) 
    else: 
     b.append(i) 

print b 
+0

Sử dụng 'isinstance (i, collections.Iterable)' thay vì kiểm tra kiểu (giả sử 'bộ sưu tập' đã được nhập) – Volatility

Các vấn đề liên quan