Cách Pythonic nhất để hợp nhất nhiều danh sách
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]5 thành một danh sách các bộ dữ liệu [nhóm các phần tử thứ
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]6 lại với nhau] là sử dụng hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]8. Nếu bạn lưu trữ các danh sách của mình trong một danh sách gồm các danh sách
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]9, hãy viết
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]0 để giải nén tất cả các danh sách bên trong vào hàm zip
l1 = [1, 2, 3] l2 = [4, 5, 6] l = list[zip[l1, l2]] print[l] # [[1, 4], [2, 5], [3, 6]]
Việc sử dụng thành thạo các cấu trúc dữ liệu có sẵn của Python là một phần không thể thiếu trong quá trình học Python của bạn. Hướng dẫn này chỉ cho bạn cách bạn có thể hợp nhất nhiều danh sách vào biểu diễn “cột”—một danh sách các bộ. Bằng cách nghiên cứu sáu cách khác nhau này, bạn sẽ không chỉ hiểu cách giải quyết vấn đề cụ thể này mà còn trở thành một lập trình viên giỏi hơn về tổng thể
Làm cách nào để hợp nhất các danh sách thành một danh sách các bộ dữ liệu?
Xem video này trên YouTube
Vấn đề. Đưa ra một số danh sách
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]1,
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]2, …,
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]3. Làm cách nào để hợp nhất chúng thành một danh sách các bộ dữ liệu [theo cột]?
Ví dụ. Giả sử, bạn muốn hợp nhất các danh sách sau
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]
vào một danh sách các bộ dữ liệu
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]
Hướng dẫn này chỉ cho bạn các cách khác nhau để hợp nhất nhiều danh sách thành một danh sách các bộ trong Python 3. Bạn có thể xem tổng quan nhanh trong trình bao Python tương tác của chúng tôi
Tập thể dục. Phương thức nào cần ít ký tự nhất?
Phương pháp 1. Chức năng khóa kéo
Cách Pythonic nhất để hợp nhất nhiều danh sách thành một danh sách các bộ dữ liệu là hàm zip. Nó hoàn thành điều này trong một dòng mã—đồng thời có thể đọc được, ngắn gọn và hiệu quả
Hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7 lấy một hoặc nhiều lần lặp và tổng hợp chúng thành một lần duy nhất bằng cách kết hợp các giá trị thứ i của mỗi lần lặp thành một bộ. Ví dụ: nén các danh sách
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]5 và
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]6 thành
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]7 cùng nhau
Đây là giải pháp mã
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]6
Đầu ra là danh sách các bộ dữ liệu sau đây
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
Lưu ý rằng giá trị trả về của hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7 là một đối tượng
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]9. Bạn cần chuyển đổi nó thành một danh sách bằng cách sử dụng hàm tạo
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]60 để tạo một danh sách các bộ dữ liệu
Nếu bạn đã lưu trữ các danh sách đầu vào trong một danh sách các danh sách, thì phương pháp sau đây là tốt nhất cho bạn
Phương pháp 2. Chức năng Zip với Giải nén
Bạn có thể sử dụng toán tử dấu hoa thị
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]61 để giải nén tất cả các phần tử bên trong từ một danh sách đã cho
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]9. Đặc biệt nếu bạn muốn hợp nhất nhiều danh sách khác nhau, điều này có thể làm giảm đáng kể độ dài mã của bạn. Thay vì viết
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]63, hãy đơn giản hóa thành
[[0, 1, 2], ['Alice', 'Bob', 'Liz'], [4500.0, 6666.66, 9999.99]]0 để giải nén tất cả các danh sách bên trong vào hàm zip và thực hiện điều tương tự
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]5
Điều này tạo ra danh sách các bộ dữ liệu
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
Tôi sẽ cân nhắc sử dụng hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7 với việc giải nén theo cách Pythonic nhất để hợp nhất nhiều danh sách thành một danh sách các bộ dữ liệu
Phương pháp 3. Danh sách hiểu
Hiểu danh sách là một cách nhỏ gọn để tạo danh sách. Công thức đơn giản là
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]66
- Sự biểu lộ. Phải làm gì với từng phần tử danh sách?
- Bối cảnh. Những yếu tố để lựa chọn?
Ví dụ
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]69 tạo danh sách
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]70
Bài viết liên quan. Bạn có thể đọc thêm về cách hiểu danh sách trong hướng dẫn cuối cùng của tôi trên blog này
Bạn có thể sử dụng câu lệnh hiểu danh sách đơn giản
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]71 để hợp nhất nhiều danh sách thành một danh sách các bộ
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]4
Đầu ra tạo ra danh sách các bộ dữ liệu được hợp nhất
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
Phương pháp này ngắn gọn và hiệu quả. Nó có thể không quá dễ đọc đối với bạn nếu bạn là một lập trình viên mới bắt đầu—nhưng những lập trình viên nâng cao thường không gặp vấn đề gì khi hiểu nội dung này. Nếu bạn thích tìm hiểu mọi thứ về các đoạn mã Python một dòng, hãy xem cuốn sách mới của tôi “Python One-Liners” [xuất bản với Nhà xuất bản San Francisco NoStarch vào năm 2020]
Phương pháp 4. vòng lặp đơn giản
Chắc chắn, bạn có thể bỏ qua tất cả Python ưa thích và chỉ cần sử dụng một vòng lặp đơn giản. Đây là cách nó hoạt động
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]6
Đầu ra là danh sách các bộ dữ liệu được hợp nhất
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
Đặc biệt là những lập trình viên đến với Python từ một ngôn ngữ lập trình khác như Go, C++ hoặc Java thích cách tiếp cận này. Họ đã quen với việc viết các vòng lặp và họ có thể nhanh chóng nắm bắt những gì đang diễn ra trong đoạn mã này
Bạn có thể hình dung quá trình thực thi đoạn mã này trong tiện ích tương tác
Tập thể dục. Nhấp vào “Tiếp theo” để xem cách sử dụng bộ nhớ diễn ra khi chạy mã
Phương pháp 5. liệt kê
Phương thức
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]72 được coi là kiểu Python tốt hơn trong nhiều tình huống—ví dụ: nếu bạn muốn lặp qua tất cả các chỉ mục của danh sách. Theo tôi, nó tốt hơn một chút so với sử dụng
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]73. Đây là cách bạn có thể sử dụng
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]74 trong mã của mình để hợp nhất nhiều danh sách thành một danh sách các bộ dữ liệu
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]1
Đầu ra là danh sách các bộ dữ liệu
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
Vẫn chưa hài lòng?
Phương pháp 6. Bản đồ + Lambda
Với chức năng
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]75 của Python, bạn có thể áp dụng một chức năng cụ thể cho từng thành phần của một lần lặp. Phải mất hai đối số
- Chức năng. Trong hầu hết các trường hợp, đây là hàm lambda mà bạn xác định nhanh chóng. Đây là chức năng mà bạn sẽ áp dụng cho từng thành phần của một…
- Có thể lặp lại. Đây là một iterable mà bạn chuyển đổi thành một iterable mới trong đó mỗi phần tử là kết quả của hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]
76 được áp dụng
Kết quả là một đối tượng
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]77. Điều mà nhiều lập trình viên không biết là hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]76 cũng cho phép nhiều lần lặp. Trong trường hợp này, hàm lambda nhận nhiều đối số—một đối số cho mỗi lần lặp. Sau đó, nó tạo ra một bộ dữ liệu có thể lặp lại và trả về kết quả này
Đây là cách bạn có thể tạo một danh sách các bộ dữ liệu từ một vài danh sách đã cho
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]3
Đầu ra là danh sách các bộ dữ liệu được hợp nhất
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]7
Đây là một cách hiệu quả và dễ đọc để hợp nhất nhiều danh sách thành một danh sách các bộ dữ liệu. Việc sử dụng hàm
l0 = [0, 'Alice', 4500.00] l1 = [1, 'Bob', 6666.66] l2 = [2, 'Liz', 9999.99]79 với nhiều đối số không được nhiều người biết đến không làm cho điều này trở nên kém đẹp đẽ hơn
Đi đâu từ đây?
Đủ lý thuyết. Hãy thực hành một số
Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa
Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?
Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế
Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?
🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn
Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã trực tuyến của mình cũng như cách bạn có thể làm được—từ sự thoải mái của bạn
Tham gia hội thảo trên web miễn phí ngay bây giờ
Chris
Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính
Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới
Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây