Làm thế nào để bạn làm phẳng một danh sách bất thường trong python?

Nhận đệ quy tất cả các phần tử của bộ sưu tập hiện tại và đưa tất cả nội dung vào một bộ sưu tập duy nhất là thao tác phổ biến nhất trong Lập trình. Chứa tất cả các phần tử vào một tập hợp duy nhất được gọi là "Làm phẳng"

Thuật ngữ "làm phẳng" là gì?

Thuật ngữ "làm phẳng" trong lập trình mô tả việc lấy một danh sách gồm các danh sách con lồng nhau và trả về một danh sách duy nhất có tất cả các giá trị từ các danh sách con được nối với nhau

Làm phẳng là quy trình chuyển đổi nhiều bộ sưu tập thành một bộ sưu tập chứa tất cả các phần tử trong bộ sưu tập mà bạn có trước đó

Danh sách Python là gì?

Danh sách là một trong những cấu trúc dữ liệu linh hoạt nhất trong Python. Chuyển đổi một danh sách thành một danh sách được gọi là "làm phẳng danh sách"

Danh sách Python có thể chứa nhiều thứ nguyên. Điều này có nghĩa là bạn có một danh sách trong danh sách. Đôi khi được gọi là "danh sách lồng nhau", những danh sách này có thể được chuyển đổi lại thành danh sách thông thường

Có hai loại danh sách lồng nhau

  1. Danh sách lồng nhau bất thường
  2. Danh sách lồng nhau thông thường

Mỗi phần tử của danh sách này là một danh sách con, do đó tuân thủ tính đồng nhất của loại phần tử. 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. Do đó, có sự bất thường về loại phần tử

Bạn có ý nghĩa gì bằng cách làm phẳng một danh sách?

Làm phẳng danh sách có nghĩa là lấy danh sách các danh sách con lồng nhau và trả về một danh sách chứa tất cả các giá trị của danh sách con. Trước tiên, hãy xem cách làm phẳng một danh sách trong lập trình Python

Python làm phẳng danh sách

3 cách dễ dàng để làm phẳng một danh sách trong Python

  1. Sử dụng hiểu danh sách
  2. Sử dụng itertools. phương thức chuỗi []
  3. Sử dụng các phương thức numpy concatenate[] và flat[]

Cách tiếp cận 1. Sử dụng hiểu danh sách

Khả năng hiểu danh sách cung cấp một cú pháp ngắn hơn khi bạn muốn tạo một danh sách mới dựa trên các giá trị của danh sách hiện có

Việc hiểu danh sách bao gồm các dấu ngoặc chứa biểu thức được thực thi cho từng phần tử và vòng lặp for để lặp qua từng phần tử

Bạn có thể sử dụng khả năng hiểu danh sách để tạo danh sách mới bằng cách làm phẳng danh sách hiện có

original_list = [[11, 21, 30], [19, 63, 71], [81, 99]]

flatten_list = [element for sublist in original_list for element in sublist]

print["Original list", original_list]

print["Flattened list", flatten_list]

đầu ra

Original list [[11, 21, 30], [19, 63, 71], [81, 99]]

Flattened list [11, 21, 30, 19, 63, 71, 81, 99]

Bạn có thể thấy rằng chúng tôi đã làm phẳng một danh sách.  

Khả năng hiểu danh sách cung cấp một cách ngắn gọn để tạo danh sách

Cách tiếp cận 2. Sử dụng itertools

Sử dụng itertools là lý tưởng để chuyển đổi danh sách 2D thành một danh sách phẳng. Điều này là do 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ố một cách tuần tự

import itertools

original_list = [[11, 21, 30], [19, 63, 71], [81, 99]]

flatten_list = list[itertools.chain[*original_list]]

print["Original list", original_list]

print["Flattened list", flatten_list]

đầu ra

Original list [[11, 21, 30], [19, 63, 71], [81, 99]]

Flattened list [11, 21, 30, 19, 63, 71, 81, 99]

Và chúng tôi có danh sách phẳng ở đầu ra

Mặc dù itertools là một cách hiệu quả để làm phẳng danh sách, nhưng nó nâng cao hơn so với cách tiếp cận cuối cùng mà chúng ta đã thảo luận

Điều này là do bạn phải nhập itertools vào mã của mình để giới thiệu một phụ thuộc mới. Ngoài ra, phương thức chain[] liên quan đến việc giải nén có thể khó hiểu

Cách tiếp cận 3. Sử dụng numpy [nối[] và phẳng[]]

Để làm phẳng danh sách các danh sách trong Python, hãy sử dụng lệnh np. nối[] và np. chức năng 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 sử dụng thuộc tính phẳng để có trình vòng lặp 1D trên mảng nhằm đạt được mục tiêu của mình

import numpy as np

original_list = [[11, 21, 30], [19, 63, 71], [81, 99]]

flatten_list = list[np.concatenate[original_list].flat]

print["Original list", original_list]

print["Flattened list", flatten_list]

đầu ra

Original list [[11, 21, 30], [19, 63, 71], [81, 99]]

Flattened list [11, 21, 30, 19, 63, 71, 81, 99]

Bạn có thể thấy rằng chúng tôi đã làm phẳng một danh sách gốc thành một danh sách được làm phẳng bằng cách sử dụng list[], np. nối [] và np. phẳng[] phương pháp

Phần kết luận

Cách tiếp cận tốt nhất để làm phẳng danh sách các danh sách trong Python là sử dụng khả năng hiểu danh sách. Nó sẽ tạo một danh sách phẳng mới từ một danh sách hiện có

Làm phẳng một danh sách có nghĩa là gì?

Do đó, làm phẳng một danh sách các danh sách như vậy có nghĩa là đưa các phần tử của danh sách con vào danh sách giống như mảng một chiều. Ví dụ: một danh sách [[1,2,3],[4,5,6]] được làm phẳng thành [1,2,3,4,5,6]

Làm cách nào để chuyển đổi danh sách đa chiều thành danh sách đơn trong Python?

Có thể chuyển đổi danh sách nhiều chiều như l=[[1,2],[3,4]] thành danh sách 1D bằng cách thực hiện sum[l,[]]< . Làm thế nào để điều này xảy ra? . Ví dụ: nếu A là danh sách 3D, thì sum[sum[A],[]],[]] sẽ làm phẳng A thành danh sách 1D. ] . How does this happen? [This doesn't work directly for higher multidimensional lists, but it can be repeated to handle those cases. For example if A is a 3D-list, then sum[sum[A],[]],[]] will flatten A to a 1D list.]

Chủ Đề