Làm phẳng danh sách đề cập đến quá trình xóa thứ nguyên khỏi danh sách. Thứ nguyên đề cập đến một tọa độ bổ sung cần thiết để xác định vị trí một mục trong danh sách. Bạn có thể san phẳng danh sách Python bằng cách sử dụng khả năng hiểu danh sách, vòng lặp for lồng nhau hoặc phương thức itertools.chain ().
Một 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. Những danh sách này, đôi khi được gọi là 'danh sách lồng nhau,' có thể được chuyển đổi trở lại thành danh sách thông thường.
Điều này có nghĩa là bạn có thể di chuyển tất cả các giá trị từ các danh sách trong một danh sách sang một danh sách duy nhất. Chuyển 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 làm phẳng Python
Có ba cách để làm phẳng danh sách Python:
- Sử dụng khả năng hiểu danh sách.
- Sử dụng vòng lặp for lồng nhau.
- Sử dụng phương thức itertools.chain ().
Trong hướng dẫn này, chúng tôi nói về cách làm phẳng danh sách bằng cách sử dụng khả năng hiểu danh sách, vòng lặp for và itertools.chain () phương pháp. Chúng tôi xem xét hai ví dụ để bạn có thể bắt đầu làm phẳng danh sách trong các chương trình của riêng mình.
Python:Làm phẳng danh sách bằng cách hiểu danh sách
Khả năng hiểu danh sách trong Python xác định danh sách dựa trên nội dung của danh sách hiện có. Bạn có thể tùy chỉnh từng phần tử đi vào danh sách mới của mình bằng cách chỉ định các điều kiện hoặc thay đổi trong phần hiểu.
Tổng hợp là một đường cú pháp để sử dụng vòng lặp for để lặp lại danh sách và tạo danh sách mới. Điều này có nghĩa là chúng hoạt động theo cách cơ bản giống như vòng lặp for nhưng sử dụng cú pháp khác.
Đây là cú pháp để hiểu danh sách:
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia chương trình đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
numbers = [1, 2, 3] new_numbers = [number * 2 for number in numbers]
Sự hiểu biết này nhân mỗi số trong danh sách "số" của chúng tôi với 2.
Làm phẳng danh sách:Ví dụ về hiểu danh sách
Chúng tôi có một danh sách các danh sách có các loại nhân bánh sandwich khác nhau có sẵn tại một nhà hàng. Hiện tại, danh sách danh sách của chúng tôi trông giống như sau:
foods = [ ["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"], ["Cheese", "Egg"], ["Ham", "Bacon", "Chicken Club", "Tuna"] ]
Danh sách đầu tiên có nhân bánh sandwich thuần chay; danh sách thứ hai có nhân bánh mì chay; danh sách thứ ba chứa tất cả nhân bánh sandwich có thịt.
Chúng tôi muốn thay đổi danh sách này thành một danh sách các loại thực phẩm. Sẽ dễ dàng hơn khi làm việc với danh sách có một thứ nguyên thay vì hai thứ nguyên. Không cần thiết phải có nhiều hơn một thứ nguyên trong danh sách này. Để xóa thứ nguyên thứ hai khỏi danh sách của chúng tôi, chúng tôi có thể sử dụng cách hiểu danh sách:
new_foods = [food for sublist in foods for food in sublist] print(new_foods)
Khả năng hiểu danh sách này lặp lại trên mọi danh sách trong biến Python “thực phẩm”. Mỗi giá trị sau đó được thêm vào một danh sách chính. Sau khi danh sách của chúng tôi được tạo, chúng tôi sẽ in nó ra bảng điều khiển.
Hãy là mã của chúng tôi và xem điều gì sẽ xảy ra:
['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']
Danh sách danh sách của chúng tôi đã được chuyển đổi thành công thành danh sách phẳng. Tất cả các thành phần hiện xuất hiện trong một danh sách thay vì ba.
Python:Làm phẳng danh sách bằng cách sử dụng vòng lặp lồng nhau
Chúng tôi cũng đạt được kết quả tương tự bằng cách sử dụng vòng lặp for Python lồng nhau. “Vòng lặp for lồng nhau” là một cách nói khác của “vòng lặp for trong vòng lặp for”. Khả năng hiểu danh sách của chúng tôi là một cách khác để biểu diễn vòng lặp for sau:
new_foods = [] for sublist in foods: for food in sublist: new_foods.append(food) print(new_foods)
Mã của chúng tôi sử dụng hai vòng lặp for để lặp lại từng mục danh sách trong mỗi danh sách trong danh sách danh sách ban đầu. Hãy chạy mã của chúng tôi:
['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']
Chương trình của chúng tôi trả về kết quả tương tự như việc hiểu danh sách của chúng tôi. Trong hầu hết các trường hợp, khả năng hiểu danh sách là giải pháp tốt hơn so với vòng lặp for. Phần hiểu danh sách ngắn hơn và trong trường hợp này, dễ đọc hơn so với vòng lặp for lồng nhau.
Python:Làm phẳng danh sách bằng Itertools
Itertools là một mô-đun trong thư viện chuẩn Python. Mô-đun cung cấp một loạt các phương pháp, giúp dễ dàng làm việc với các đối tượng và trình tạo có thể lặp lại.
Vì mục đích của chúng tôi, chúng tôi chỉ đề cập đến chain () phương pháp. Phương thức này chấp nhận một danh sách các danh sách và trả về một danh sách phẳng.
Bắt đầu bằng cách nhập mô-đun itertools vào mã của chúng tôi bằng cách sử dụng câu lệnh nhập Python:
import itertools
Tiếp theo, xác định danh sách các danh sách và sử dụng chain () phương pháp làm phẳng danh sách:
foods = [ ["Tomato and Cucumber", "Hummus, Beetroot, and Lettuce"], ["Cheese", "Egg"], ["Ham", "Bacon", "Chicken Club", "Tuna"] ] new_foods = itertools.chain(*foods)
Trong mã của chúng tôi, chúng tôi sử dụng ký hiệu * để giải nén danh sách của chúng tôi. Điều này chuyển đổi danh sách của chúng tôi thành các đối số hàm có thể được phân tích cú pháp bởi chain () phương pháp.
Chuỗi () phương thức trả về một đối tượng itertools.chain. Để xem danh sách phẳng của chúng ta, chúng ta phải chuyển đổi đối tượng này thành một danh sách. Chúng tôi thực hiện việc này bằng cách sử dụng list () phương pháp:
print(list(new_foods))
Hãy thực thi mã của chúng tôi:
['Tomato and Cucumber', 'Hummus, Beetroot, and Lettuce', 'Cheese', 'Egg', 'Ham', 'Bacon', 'Chicken Club', 'Tuna']
Mã của chúng tôi đã san bằng danh sách của chúng tôi.
Mặc dù itertools là một cách hiệu quả để làm phẳng danh sách, nhưng nó tiên tiến hơn hai 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 bạn để giới thiệu một phụ thuộc mới. Còn gì nữa, chain () phương pháp liên quan đến việc giải nén có thể khó hiểu.
Kết luận
Bạn có thể san phẳng danh sách Python bằng cách sử dụng khả năng hiểu danh sách, vòng lặp for lồng nhau và phương thức itertools.chain (). Đọc hiểu danh sách là phương pháp “Pythonic” nhất và do đó được ưa chuộng trong hầu hết các trường hợp.
Mặc dù các vòng lặp for lồng nhau có hiệu quả, nhưng chúng sử dụng nhiều dòng mã hơn so với việc hiểu danh sách. Phương thức itertools.chain () cũng hiệu quả tương tự nhưng nó có thể khó hiểu đối với người mới bắt đầu.
Thường không cần nhập thư viện mới - itertools - khi Python cung cấp cho bạn tất cả các công cụ bạn cần để làm phẳng danh sách.
Bạn có muốn tìm hiểu thêm về Python? Xem hướng dẫn Cách học Python đầy đủ của chúng tôi. Bạn sẽ tìm thấy các mẹo học tập của chuyên gia và danh sách các khóa học và sách hàng đầu mà bạn có thể học.