Python làm phẳng danh sách đệ quy

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

Nộ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]
8

Quá 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 _______ 67

Là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ấ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]
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]
2

Là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]
3

Mộ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]
4

Là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ậm

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

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

Vớ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]
4

Chú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]
5

Sự 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

Chủ Đề