Hướng dẫn làm phẳng danh sách & Danh sách các danh sách trong Python

Spread the love

Chuyển đổi mảng 2D thành mảng 1D được gọi là làm phẳng. Có nhiều cách tiếp cận để giải quyết vấn đề.

Chúng ta sẽ khám phá một số trong số chúng trong hướng dẫn này.

Hãy xem một ví dụ.

Đầu vào

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

đầu ra

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#1. vòng lặp

Cách phổ biến nhất để giải quyết vấn đề là sử dụng các vòng lặp. Tôi nghĩ rằng hầu hết các bạn đã có nó. Hãy xem các bước để giải quyết vấn đề bằng cách sử dụng các vòng lặp.

  • Khởi tạo danh sách các danh sách có dữ liệu giả và đặt tên là dữ liệu.
  • Bây giờ, hãy khởi tạo một danh sách trống có tên là flat_list.
  • Lặp lại dữ liệu.
    • Giải nén tất cả các yếu tố từ danh sách hiện tại.
    • Thêm chúng vào flat_list bằng phương thức nối thêm danh sách.
  • In kết quả.

Xem mã cho vấn đề dưới đây.

# initializing the data and an empty list
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# iterating over the data
for item in data:
    # appending elements to the flat_list
    flat_list += item

# printing the resultantn flat_list
print(flat_list)

Bạn có thể sử dụng một vòng lặp khác để thêm các phần tử danh sách phụ vào flat_list thay vì toán tử nối. Chúng ta cũng có thể sử dụng khả năng hiểu danh sách thay vì vòng lặp.

  Cách truy cập site SharePoint của Microsoft Teams cho một nhóm

Cả hai đều làm cùng một công việc. Hãy xem cách tiếp theo để giải quyết vấn đề.

#2. Itertools – Chuỗi

Chúng tôi sẽ sử dụng một phương thức có tên là chuỗi từ mô-đun tích hợp itertools.

Chuỗi phương thức lặp qua từng danh sách con và trả về các phần tử cho đến khi không còn danh sách con nào trong đó. Nó trả về một iterable mà chúng ta phải chuyển đổi nó thành một danh sách.

Hãy xem các bước liên quan đến việc giải quyết vấn đề.

  • Khởi tạo danh sách các danh sách có dữ liệu giả và đặt tên là dữ liệu.
  • Lấy iterable làm phẳng bằng cách sử dụng itertools.chain(*data).
  • Chuyển đổi kết quả có thể lặp lại thành một danh sách.
  • In danh sách phẳng.

Bạn có thể xem qua mã trong đoạn mã dưới đây.

# importing the module
import itertools

# initializing the data
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# flattening the list and storing the result
flat_list = itertools.chain(*data)

# converting iterable to list and printing
print(list(flat_list))

#3. Làm phẳng danh sách đa cấp

Chúng ta đã thấy cách làm phẳng một danh sách các danh sách. Các phương pháp trên mà chúng ta đã thảo luận để làm phẳng danh sách sẽ không hoạt động đối với danh sách đa cấp. Hãy xem một ví dụ.

  Cách lấy ảnh chuyển động và chỉnh sửa khuôn mặt trên Nexus 5X và 6P

Đầu vào

[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]

đầu ra

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Vì chúng tôi không biết độ sâu của danh sách trước chương trình, chúng tôi phải sử dụng đệ quy để giải quyết vấn đề.

  • Khởi tạo dữ liệu như trong ví dụ và đặt tên là data.
  • Khởi tạo một danh sách rỗng gọi là flat_list.
  • Viết một hàm gọi là flatten_list.
    • Lặp lại các phần tử của danh sách đã cho.
    • Nếu phần tử là một danh sách thì gọi lại hàm đó theo cách đệ quy.
    • Nếu phần tử không phải là danh sách, thì hãy thêm phần tử vào danh sách phẳng.
  • Gọi hàm với dữ liệu.
  • Hàm sẽ điền tất cả các phần tử trong danh sách flat_list.
  • In flat_list để kiểm tra đầu ra.

Phù! rất nhiều bước để viết mã. Đừng lo. Việc chuyển đổi các câu lệnh trên thành mã sẽ không mất nhiều hơn phút.

# initializing the data and empty list
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# function
def flatten_list(data):
    # iterating over the data
    for element in data:
        # checking for list
        if type(element) == list:
            # calling the same function with current element as new argument
            flatten_list(element)
        else:
            flat_list.append(element)

# flattening the given list
flatten_list(data)

# printing the flat_list
print(flat_list)

Hãy nhớ rằng chúng tôi không chuyển đổi danh sách hiện có. Thay vào đó, chúng tôi đã tạo một danh sách mới với phần tử danh sách đã cho.

  7 phần mềm tốt nhất để giám sát ứng dụng web của bạn [Self-hosted and Cloud-based]

Sự kết luận

Hy vọng bạn thích hướng dẫn này. Có thể có nhiều cách khác để làm phẳng một danh sách trong Python nhưng tôi cảm thấy những cách trên có lẽ là những cách dễ nhất.

Mã hóa vui vẻ 🙂

x