Khi được yêu cầu làm phẳng một danh sách lồng nhau đã cho bằng cách sử dụng kỹ thuật đệ quy, lập chỉ mục đơn giản và phương thức 'isinstance' có thể được sử dụng cùng với đệ quy
Đệ quy tính toán đầu ra của các bit nhỏ của vấn đề lớn hơn và kết hợp các bit này để đưa ra giải pháp cho vấn đề lớn hơn
Thí dụ
Dưới đây là một minh chứng cho điều tương tự -
Bản thử trực tiếp
def flatten_list[my_list]: if my_list == []: return my_list if isinstance[my_list[0], list]: return flatten_list[my_list[0]] + flatten_list[my_list[1:]] return my_list[:1] + flatten_list[my_list[1:]] my_list = [[1,2],[3,4], [90, 11], [56, 78], [[34,56]]] print["The list is :"] print[my_list] print["The list after flattening is : "] print[flatten_list[my_list]]
đầu ra
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]
Giải trình
- Một phương thức có tên 'flatten_list' được xác định, lấy một danh sách làm tham số
- Nó kiểm tra xem kiểu dữ liệu của phần tử đầu tiên trong danh sách
- Nếu nó khớp với một danh sách, thì phần tử đầu tiên cùng với phần tử thứ hai đến phần tử cuối cùng được nối và hiển thị
- Điều này dẫn đến một danh sách lồng nhau được làm phẳng
- Mặt khác, phần tử đầu tiên bị loại bỏ và danh sách được đảo ngược đầu tiên và danh sách bình thường được kết hợp và được trả về dưới dạng đầu ra
- Bên ngoài chức năng, một danh sách lồng nhau được xác định và được hiển thị trên bàn điều khiển
- Phương thức được gọi bằng cách chuyển danh sách dưới dạng tham số
- Đầu ra được hiển thị trên bàn điều khiển
Cập nhật ngày 12-Mar-2021 12. 26. 58
Danh sách là cấu trúc dữ liệu linh hoạt nhất trong Python. Trong khi đó, danh sách 2D thường được gọi là danh sách danh sách, là một đối tượng danh sách trong đó mọi mục đều là danh sách - ví dụ:.
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
6Nội dung chính Hiển thị
- Giới thiệu
- Các loại danh sách lồng nhau
- Làm phẳng danh sách các danh sách bằng cách sử dụng Nested for Loops
- Làm phẳng danh sách các danh sách bằng cách hiểu danh sách
- Làm phẳng danh sách các danh sách theo cách đệ quy
- Sử dụng thư viện
- Sử dụng chức năng tích hợp
- Sự kết luận
Làm phẳng danh sách các danh sách đòi hỏi phải chuyển đổi danh sách 2D thành danh sách 1D bằng cách bỏ lồng từng mục danh sách được lưu trữ trong danh sách danh sách - i. e. , chuyển đổi
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
7 thành Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8Quá trình làm phẳng có thể được thực hiện bằng cách sử dụng các vòng lặp lồng nhau, hiểu danh sách, đệ quy, các hàm tích hợp hoặc bằng cách nhập các thư viện trong Python tùy thuộc vào mức độ đều đặn và độ sâu của các danh sách lồng nhau
Các loại danh sách lồng nhau
Vì Python được gõ yếu, bạn có thể gặp các danh sách danh sách thường xuyên và không thường xuyên
Danh sách danh sách thông thường
Mọi phần tử của danh sách này đều là danh sách con, do đó tuân thủ tính đồng nhất của loại phần tử.
Ví dụ.
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
7 là danh sách chính quy của danh sách vì regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
0 thuộc loại regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
1. Danh sách danh sách bất thường
Mọi phần tử của danh sách này đều là danh sách con hoặc mục không thuộc danh sách [ví dụ: số nguyên hoặc chuỗi]. Do đó, có sự bất thường về loại phần tử. Thí dụ.
regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
2 trong đó regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
3 và regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
4 thuộc loại _______ 61 và ________ 66 thuộc loại _______ 67Làm phẳng danh sách các danh sách bằng cách sử dụng Nested for Loops
Đây là cách tiếp cận mạnh mẽ để có được danh sách phẳng bằng cách chọn mọi phần tử từ danh sách danh sách và đặt nó vào danh sách 1D
Mã trực quan như được hiển thị bên dưới và hoạt động cho cả danh sách danh sách thông thường và không thường xuyên
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]4
Kết quả này trong
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Làm phẳng danh sách các danh sách bằng cách hiểu danh sách
Cách tiếp cận này cung cấp một giải pháp tao nhã nhưng ít trực quan hơn để tạo danh sách phẳng dựa trên danh sách 2D hiện có
regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
Cái nào sẽ xuất ra như sau
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]7
Làm phẳng danh sách các danh sách theo cách đệ quy
Danh sách 2D cũng có thể được làm phẳng theo cách đệ quy. Việc thực hiện dưới đây hoạt động cho cả danh sách danh sách thường xuyên và không thường xuyên
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]8
Cái nào sẽ cho chúng ta
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]9
Sử dụng thư viện
Bạn cũng có thể nhờ đến sự trợ giúp của các thư viện Python cho nhiệm vụ này
Làm phẳng danh sách các danh sách bằng cách sử dụng funcools [reduce[] và iconcat[]]
Hàm
regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
8 thực hiện thao tác nối cơ bản và được áp dụng tích lũy cho các mục của danh sách danh sách, từ trái sang phải, để giảm nó thành một danh sách duy nhấtOriginal List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1Điều gì sẽ cho chúng ta kết quả mong muốn
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2Làm phẳng danh sách các danh sách bằng itertools [chain[]]
Cách tiếp cận này là lý tưởng để chuyển đổi danh sách 2-D thành một danh sách phẳng vì nó coi các chuỗi liên tiếp là một chuỗi duy nhất bằng cách lặp qua lần lặp được truyền dưới dạng đối số theo cách tuần tự
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3Một lần nữa, điều này sẽ cho chúng ta một danh sách phẳng làm đầu ra
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4Làm phẳng danh sách các danh sách bằng cách sử dụng numpy [nối [] và phẳng []]
Numpy cung cấp các hoạt động phổ biến bao gồm nối các mảng 2D thông thường theo hàng hoặc theo cột. Chúng tôi cũng đang sử dụng thuộc tính
regular_list = [[1, 2, 3, 4], [5, 6, 7], [8, 9]]
flat_list = [item for sublist in regular_list for item in sublist]
print['Original list', regular_list]
print['Transformed list', flat_list]
9 để nhận trình vòng lặp 1D trên mảng nhằm đạt được mục tiêu của mình. Tuy nhiên cách này tương đối chậmOriginal List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0Cung cấp cho chúng tôi đầu ra mong muốn
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]7
Sử dụng chức năng tích hợp
Nhiệm vụ làm phẳng cũng có thể được thực hiện bằng cách sử dụng các hàm tích hợp sẵn mà Python cung cấp
Làm phẳng danh sách các danh sách bằng cách sử dụng tổng
Tổng hợp các danh sách bên trong là một giải pháp khác. Hàm có hai tham số.
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]70 là một danh sách các danh sách và
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]71 là một danh sách trống trong trường hợp của chúng tôi, đóng vai trò là danh sách phẳng ban đầu mà các mục của danh sách con bên trong được thêm vào
Cách tiếp cận này thuận tiện vì bạn không phải nhập bất kỳ thứ gì nhưng chậm hơn so với hàm
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]72 và hàm
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]73 khi số lượng danh sách con lớn
Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2Với đầu ra
The list is : [[1, 2], [3, 4], [90, 11], [56, 78], [[34, 56]]] The list after flattening is : [1, 2, 3, 4, 90, 11, 56, 78, 34, 56]7
Làm phẳng danh sách các danh sách bằng Lambda
Một chức năng ẩn danh có thể được xác định bằng từ khóa lambda. Danh sách thông thường/không thường xuyên được chuyển làm đối số cho hàm ẩn danh này và việc đánh giá biểu thức được thực hiện để có được danh sách 1D phẳng
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
4Chúng tôi một lần nữa sẽ nhận được kết quả mong muốn
Original List [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
Transformed Flat List [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
5Sự kết luận
Trong bài viết này, chúng tôi đã cung cấp một danh sách đầy đủ các cách chúng tôi có thể hoàn thành nhiệm vụ làm phẳng danh sách các danh sách trong Python