2010-11-06 28 views
60

Tôi muốn nén danh sách sau đây của danh sách:Làm thế nào để nén liệt kê trong một danh sách

>>> zip([[1,2], [3,4], [5,6]]) 
[[1,3,5], [2,4,6]] 

này có thể đạt được với zip thực hiện chỉ khi danh sách được chia thành các thành phần riêng biệt:

>>> zip([1,2], [3,4], [5,6]) 
    (1, 3, 5), (2, 4, 6)] 

Không thể tìm ra cách chia danh sách và chuyển các phần tử riêng lẻ thành zip. Một giải pháp chức năng được ưa thích.

Trả lời

94

Hãy thử điều này:

>>> zip(*[[1,2], [3,4], [5,6]]) 
[(1, 3, 5), (2, 4, 6)] 

Xem Unpacking Argument Lists:

Tình hình ngược lại xảy ra khi các đối số đã có trong danh sách hoặc tuple nhưng cần phải được giải nén cho một cuộc gọi chức năng yêu cầu đối số vị trí riêng biệt . Ví dụ, hàm range() dựng sẵn mong đợi các đối số khởi động và dừng riêng biệt. Nếu họ không có sẵn một cách riêng biệt, hãy viết lời gọi hàm với * -operator để giải nén các đối số ra khỏi một danh sách hoặc tuple:

>>> range(3, 6)    # normal call with separate arguments 
[3, 4, 5] 
>>> args = [3, 6] 
>>> range(*args)   # call with arguments unpacked from a list 
[3, 4, 5] 
+3

Xem http://docs.python.org/tutorial/controlflow. html # unpacking-argument-lists cho cách hoạt động của nó. – ameer

+0

@ameer: ​​Cảm ơn, đã thêm. –

+1

Đây là một trong những tính năng yêu thích được đánh giá thấp của tôi. Không thường hữu ích, nhưng rất tiện lợi khi bạn cần! – fmark

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