Làm thế nào để bạn mở ra một danh sách trong python?
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 7, 8 và cách hiểu danh sách Show
Sử dụng 1 hoặc 2 để làm phẳng một mảng NumPy 3
Ngược lại, hãy xem bài viết sau về cách chuyển đổi 3 hoặc 5 một chiều thành hai chiều
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) 7Bạn có thể làm phẳng một danh sách các danh sách với 7
1nguồn. list_flatten. py 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 9. Không cần thiết phải lập danh sách khi sử dụng nó trong câu lệnh 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 41. Nếu bạn cần một danh sách, hãy sử dụng 9
nguồn. list_flatten. py Chỉ danh sách 2D mới có thể được làm phẳng bằng 7. Trong trường hợp danh sách 3D trở lên, kết quả như sau
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ư 44 hoặc 45 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) 8Bạ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 8Giá trị ban đầu có thể được chỉ định làm đối số thứ hai của 8. Nếu bạn vượt qua danh sách trống 49, hoạt động 70 của danh sách sẽ nối các danh sách
Lưu ý rằng giá trị mặc định của đối số thứ hai là 71, vì vậy nếu bỏ qua, sẽ xảy ra lỗi do hoạt động của 70 với 44 và 5 7nguồn. list_flatten. py Tuples có thể được xử lý trong cùng một cách 3nguồn. list_flatten. py Giống như 7, nó không hoạt động cho hơn 3D hoặc danh sách không đều 5nguồn. list_flatten. py Làm phẳng danh sách với khả năng hiểu danh sáchBạ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 6nguồn. danh_sách. py Ví dụ trên tương đương với vòng lặp 40 lồng nhau sau 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
So sánh tốc độLưu ý rằng mặc dù 8 dễ sử dụng nhưng nó chậm hơn nhiều so với 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 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 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 31 trên Jupyter Notebook. Lưu ý rằng nó không hoạt động trên tập lệnh Python
5 dòng 4nguồn. list_flatten_timeit. py 100 dòng 0nguồn. list_flatten_timeit. py 10000 dòng 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 đềuCầ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
2nguồn. list_flatten. py Loại phần tử 32 được kiểm tra bởi 33 và được xử lý đệ quy
Xác định xem 32 có thể lặp lại bằng 35 không. Bạn cần nhập thư viện chuẩn 36
Chuỗi 37 và chuỗi byte 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 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à 39 được bao gồm 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 36. Tuples và 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 |