2012-01-08 42 views
7

Tại sao sử dụng mở rộng khi bạn chỉ có thể sử dụng toán tử + =? Phương pháp nào là tốt nhất? Ngoài ra cách tốt nhất để tham gia nhiều danh sách thành một danh sách những gìlý do tại sao mở rộng danh sách python

#my prefered way 
_list=[1,2,3] 
_list+=[4,5,6] 
print _list 
#[1, 2, 3, 4, 5, 6] 

#why use extend: 
_list=[1,2,3] 
_list.extend([4,5,6]) 
print _list 
#[1, 2, 3, 4, 5, 6] 



_lists=[range(3*i,3*i+3) for i in range(3)] 
#[[0, 1, 2], [3, 4, 5], [6, 7, 8]] 

#my prefered way of merging lists 
print sum(_lists,[]) 
#[0, 1, 2, 3, 4, 5, 6, 7, 8] 


#is there a better way? 
from itertools import chain 
print list(chain(*_lists)) 
#[0, 1, 2, 3, 4, 5, 6, 7, 8] 

Trả lời

16

+= chỉ có thể được sử dụng để mở rộng một danh sách bằng cách danh sách khác, trong khi extend có thể được sử dụng để mở rộng một danh sách bằng cách một đối tượng iterable

ví dụ

bạn có thể làm

a = [1,2,3] 
a.extend(set([4,5,6])) 

nhưng bạn không thể làm

a = [1,2,3] 
a += set([4,5,6]) 

Đối với câu hỏi thứ hai

[item for sublist in l for item in sublist] is faster. 

Making a flat list out of list of lists in Python

+0

Cảm ơn! Đó là khá nhiều móng tay nó. Là _list + = danh sách (_iterable) tương đương? –

+1

Có thể đạt được kết quả tương tự, nhưng việc triển khai cơ bản sẽ khác nhau. – qiao

1

Bạn có thể extend() một Pytho thấy n danh sách với một đối tượng không phải danh sách như một trình lặp. Trình lặp không lưu trữ bất kỳ giá trị nào, nhưng một đối tượng để lặp lại một lần trên một số giá trị. Thêm thông tin về các trình vòng lặp here.

Trong chủ đề này, có những ví dụ mà một iterator được sử dụng như một cuộc tranh cãi của extend() phương pháp: append vs. extend

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