Bài viết này mô tả cách làm phẳng một danh sách các danh sách [danh sách lồng nhau] trong Python. Bạn có thể sử dụng
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7, t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8 và cách hiểu danh sách- Làm phẳng một danh sách các danh sách [danh sách 2D]
- Làm phẳng danh sách với
7t_2d = [[0, 1], [2, 3]] print[tuple[itertools.chain.from_iterable[t_2d]]] # [0, 1, 2, 3]
- Làm phẳng danh sách với
8t_2d = [[0, 1], [2, 3]] print[tuple[itertools.chain.from_iterable[t_2d]]] # [0, 1, 2, 3]
- Làm phẳng danh sách với khả năng hiểu danh sách
- So sánh tốc độ
- Làm phẳng danh sách với
- Làm phẳng danh sách 3D và nhiều chiều hơn và danh sách không đều
Sử dụng
l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
1 hoặc l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
2 để làm phẳng một mảng NumPy l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
3- Làm phẳng một mảng NumPy với ravel[] và flatten[]
Ngược lại, hãy xem bài viết sau về cách chuyển đổi
l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
3 hoặc l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
5 một chiều thành hai chiều- Chuyển đổi mảng 1D thành mảng 2D trong Python [numpy. ndarray, danh sách]
Liên kết được tài trợ
Làm phẳng một danh sách các danh sách [danh sách 2D]
Làm phẳng danh sách với t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
Bạn có thể làm phẳng một danh sách các danh sách với
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7- itertools. chuỗi. from_iterable[] — Các hàm tạo trình vòng lặp để lặp hiệu quả — Python 3. 8. 4 tài liệu
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
1nguồn. list_flatten. py
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7 trả về một iterator, vì vậy nếu bạn muốn chuyển đổi nó thành một danh sách, hãy sử dụng l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
9. Không cần thiết phải lập danh sách khi sử dụng nó trong câu lệnh t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
40Một bộ của các bộ có thể được xử lý theo cùng một cách. Trong ví dụ sau, kết quả được chuyển đổi thành một bộ với
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
41. Nếu bạn cần một danh sách, hãy sử dụng l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
9- Chuyển đổi danh sách và tuple với nhau trong Python
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
nguồn. list_flatten. py
Chỉ danh sách 2D mới có thể được làm phẳng bằng
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7. Trong trường hợp danh sách 3D trở lên, kết quả như saul_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
nguồn. list_flatten. py
Một lỗi được đưa ra nếu nó chứa các đối tượng không thể lặp lại, chẳng hạn như
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
44 hoặc t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
45t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
4nguồn. list_flatten. py
Các trường hợp có danh sách 3D trở lên và danh sách không đều được mô tả sau
Làm phẳng danh sách với t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
Bạn cũng có thể làm phẳng một danh sách các danh sách bằng chức năng tích hợp sẵn
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8Giá trị ban đầu có thể được chỉ định làm đối số thứ hai của
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8. Nếu bạn vượt qua danh sách trống t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
49, hoạt động t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
70 của danh sách sẽ nối các danh sách- Thêm một mục vào danh sách trong Python [chắp thêm, mở rộng, chèn]
Lưu ý rằng giá trị mặc định của đối số thứ hai là
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
71, vì vậy nếu bỏ qua, sẽ xảy ra lỗi do hoạt động của t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
70 với t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
44 và l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
5t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7nguồn. list_flatten. py
Tuples có thể được xử lý trong cùng một cách
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
3nguồn. list_flatten. py
Giống như
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7, nó không hoạt động cho hơn 3D hoặc danh sách không đềut_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
5nguồn. list_flatten. py
Làm phẳng danh sách với khả năng hiểu danh sách
Bạn cũng có thể làm phẳng một danh sách các danh sách với khả năng hiểu danh sách lồng nhau
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
6nguồn. danh_sách. py
Ví dụ trên tương đương với vòng lặp
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
40 lồng nhau saut_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8nguồn. danh_sách. py
Trong trường hợp hiểu danh sách ở trên, cũng như các phương pháp khác, chỉ có thể làm phẳng một cấp độ và sẽ xảy ra lỗi nếu bao gồm các đối tượng không thể lặp lại
Cũng có thể làm cho lồng sâu hơn để hỗ trợ nhiều hơn ba chiều hoặc tạo phân nhánh có điều kiện tùy thuộc vào loại phần tử, nhưng điều này không được khuyến khích vì nó sẽ quá phức tạp
Xem bài viết sau để biết thêm thông tin về hiểu danh sách
- Danh sách hiểu trong Python
So sánh tốc độ
Lưu ý rằng mặc dù
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8 dễ sử dụng nhưng nó chậm hơn nhiều so với t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7 hoặc khả năng hiểu danh sách khi số lượng dòng [số lượng danh sách bên trong] lớn. Tốt hơn là không sử dụng t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
8 khi số lượng dòng lớn và tốc độ xử lý và hiệu quả bộ nhớ là quan trọngMặc dù bạn phải nhập itertools, nhưng
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7 nhanh hơn khả năng hiểu danh sáchĐoạn mã sau được đo bằng lệnh ma thuật
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
31 trên Jupyter Notebook. Lưu ý rằng nó không hoạt động trên tập lệnh Python- Đo thời gian thực hiện với timeit trong Python
5 dòng
l_3d = [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
print[list[itertools.chain.from_iterable[l_3d]]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
4nguồn. list_flatten_timeit. py
100 dòng
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
0nguồn. list_flatten_timeit. py
10000 dòng
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
1nguồn. list_flatten_timeit. py
Làm phẳng danh sách 3D và nhiều chiều hơn và danh sách không đều
Cần xác định một chức năng mới để làm phẳng danh sách 3D và đa chiều hơn hoặc danh sách không đều
Mã mẫu sau dựa trên bài viết sau
- python - Làm phẳng danh sách danh sách không đều
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
2nguồn. list_flatten. py
Loại phần tử
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
32 được kiểm tra bởi t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
33 và được xử lý đệ quy- Nhận và kiểm tra loại đối tượng trong Python. loại [], isinstance []
Xác định xem
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
32 có thể lặp lại bằng t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
35 không. Bạn cần nhập thư viện chuẩn t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
36- bộ sưu tập. abc. Có thể lặp lại — Các lớp cơ sở trừu tượng dành cho vùng chứa — Python 3. 8. 4 tài liệu
Chuỗi
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
37 và chuỗi byte t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
38 cũng có thể lặp lại, vì vậy chúng bị loại trừ. Nếu không loại trừ sẽ tách ra từng ký tựChức năng này có thể được sử dụng trong mọi trường hợp
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
3nguồn. list_flatten. py
Sẽ không thành vấn đề nếu các đối tượng có thể lặp lại khác nhau như danh sách, bộ dữ liệu và
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
39 được bao gồmt_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
4nguồn. list_flatten. py
Nếu bạn chỉ muốn xử lý danh sách, bạn không cần nhập
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
36. Tuples và t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
39 không được làm phẳng, nhưng điều này sẽ đủ trong hầu hết các trường hợp