Cách nén danh sách trong một danh sách


91

Tôi muốn nén danh sách danh sách sau:

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

Điều này có thể đạt được với việc ziptriển khai hiện tại chỉ khi danh sách được chia thành các thành phần riêng lẻ:

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

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

Câu trả lời:


146

Thử đi:

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

Xem Giải nén Danh sách Đối số :

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

>>> 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]

4
Xem docs.python.org/tutorial/… để biết cách hoạt động của nó.
ameer

2
Tôi muốn xem một giải pháp thay thế trong trường hợp bạn có một danh sách với hàng triệu mục nhập. Nó có thể không phải là một ý tưởng tốt để giải nén một triệu sản phẩm trong một cuộc gọi chức năng ...
Blixt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.