Bạn có thể làm phẳng một danh sách trong python không?

Có một số cách để giải nén danh sách lồng nhau và tạo thành danh sách phẳng, một số cách tiếp cận này không cần thư viện trong khi những cách khác sử dụng itertools, functools và numpy

1. Vòng lặp và hiểu danh sách¶

Đây là cách dễ nhất để làm phẳng một danh sách. Nó sử dụng một vòng lặp for để lặp qua danh sách chính và một vòng lặp for lồng nhau khác để lặp qua phần tử của danh sách chính

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = []
for sublist in nested_list:
  for element in sublist:
    flat_list.append[element]
print[flat_list]

đầu ra

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

Một phiên bản ngắn hơn của điều này sử dụng khả năng hiểu danh sách

flat_list = [element for sublist in nested_list for element in sublist]

Ngoài ra, có thể sử dụng phần mở rộng [] để tạo danh sách kết quả mà không cần vòng lặp lồng nhau

flat_list = []
for sublist in nested_list:
  flat_list.extend[element]

2. itertools. chuỗi[*nested_list]¶

Itertools là một phần của thư viện tiêu chuẩn của python và cung cấp phương thức để tạo danh sách phẳng. Phương thức chuỗi lấy danh sách làm đối số, do đó, một

[[7], [0, 9, 3], [4, 6, 8]]
[["lorem", "ipsum", "seth", "sir"], ["domat", "texeto", "do"]]
5 được sử dụng để giải nén danh sách, đọc thêm về *args tại đây, giá trị trả về là một trình vòng lặp chứ không phải danh sách, sử dụng list[] nó buộc phải mang lại tất cả các phần tử

import itertools

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = itertools.chain[*nested_list]
flat_list  = list[flat_list]

3. itertools. chuỗi. from_iterable[nested_list]¶

Tương tự với itertools. chain[] nhưng lấy một danh sách lồng nhau làm đối số

import itertools

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = itertools.chain.from_iterable[nested_list]
flat_list  = list[flat_list]

4. công cụ chức năng. giảm[hàm, Nested_list]¶

reduce[] hoạt động bằng cách áp dụng một hàm cho hai phần tử của một iterable tích lũy

from functools import reduce

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = reduce[lambda x, y: x+y, nested_list]

Ngoài ra, thay vì viết hàm lambda, toán tử dựng sẵn. concat có thể được sử dụng

________số 8

5. cục mịch. nối [nested_list]¶

Trả về danh sách đã hợp nhất thay vì một trình vòng lặp

[[7], [0, 9, 3], [4, 6, 8]]
[["lorem", "ipsum", "seth", "sir"], ["domat", "texeto", "do"]]
0

6. cục mịch. mảng [danh sách lồng nhau]. bằng phẳng¶

Mảng Numpy có một thuộc tính phẳng có thể được sử dụng để lấy một trình vòng lặp cho một mảng phẳng nhưng nó chỉ hoạt động nếu các danh sách bên trong danh sách lồng nhau có cùng độ dài

Chủ Đề