[MẸO] Python: Làm phẳng danh sách các danh sách trong một dòng

By khoanc, at: 17:33 Ngày 16 tháng 7 năm 2025

Thời gian đọc ước tính: __READING_TIME__ minutes

[TIPS] Python: Flatten a List of Lists in One Line
[TIPS] Python: Flatten a List of Lists in One Line

Khi làm việc với Python, bạn thường gặp phải tình huống phổ biến này:

 

Bạn có một danh sách các danh sách, và bạn muốn làm phẳng nó thành một danh sách đơn.

 

Vấn đề

 

Đây là một ví dụ:

 

data = [[1, 2], [3, 4], [5, 6]]

 

Kết quả mong muốn:

 

[1, 2, 3, 4, 5, 6]

 

Giải pháp đơn giản: List Comprehension

 

Cách Pythonic nhất để làm phẳng một danh sách các danh sách là:

 

flattened = [item for sublist in data for item in sublist]

 

Giải thích

 

Đây là một biểu thức list lồng nhau, tương đương về chức năng với:

 

flattened = []
for sublist in data:
    for item in sublist:
        flattened.append(item)

 

Nhưng ở dạng ngắn gọn hơn nhiều.

 

Cách khác: Sử dụng itertools.chain

 

Đối với các tập dữ liệu lớn hơn hoặc nhạy cảm với bộ nhớ, bạn có thể sử dụng mô-đun itertools tích hợp sẵn của Python:

 

import itertools

flattened = list(itertools.chain.from_iterable(data))

 

Phương pháp này tạo ra một iterator, có thể hiệu quả hơn khi làm việc với lượng dữ liệu lớn.

 

Ví dụ

 

data = [['a', 'b'], ['c', 'd'], ['e']]
flattened = [item for sublist in data for item in sublist]
print(flattened)
# Kết quả: ['a', 'b', 'c', 'd', 'e']

 

Thực hành tốt nhất

 

  • Sử dụng list comprehension để có mã rõ ràng và ngắn gọn khi làm việc với các tập dữ liệu nhỏ đến trung bình.
     

  • Sử dụng itertools.chain khi làm việc với dữ liệu lớn hoặc khi bạn muốn xử lý các mục một cách lười biếng.

 

Kỹ thuật này là một phần không thể thiếu trong phát triển Python sạch và được sử dụng rộng rãi trong thao tác dữ liệu, thu thập dữ liệu web và đường ống dữ liệu.

 

Tham khảo: Câu trả lời hàng đầu của StackOverflow

 

Tag list:

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.