Chuyển đổi một chuỗi các byte thành chuỗi unicode được thực hiện bằng cách gọi phương thức
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
8 trên đối tượng import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
9 [trong Python 2.x] hoặc t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
0 [Python 3.x].Nếu bạn thực sự có một danh sách các byte, sau đó, để có được đối tượng này, 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]
1 hoặc t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
2.Bạn cần chỉ định mã hóa được sử dụng để mã hóa chuỗi Unicode gốc.
Tuy nhiên, thuật ngữ "chuỗi python" hơi mơ hồ và cũng phụ thuộc vào phiên bản. Loại Python
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
9 là viết tắt của chuỗi byte trong Python 2.x và chuỗi Unicode trong Python 3.x. Vì vậy, trong Python 2, chỉ cần làm t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
1 sẽ cung cấp cho bạn một đối tượng import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
9.Bản demo cho Python 2:
In [1]: 'тест'
Out[1]: '\xd1\x82\xd0\xb5\xd1\x81\xd1\x82'
In [2]: bytelist = ['\xd1', '\x82', '\xd0', '\xb5', '\xd1', '\x81', '\xd1', '\x82']
In [3]: ''.join[bytelist].decode['utf-8']
Out[3]: u'\u0442\u0435\u0441\u0442'
In [4]: print ''.join[bytelist].decode['utf-8'] # encodes to the terminal encoding
тест
In [5]: ''.join[bytelist] == 'тест'
Out[5]: True
Bài viết này mô tả cách làm phẳng 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]
6, t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7 và liệt kê toàn bộ.- Làm phẳng danh sách các danh sách [danh sách 2D]
- Danh sách phẳng với
6t_2d = [[0, 1], [2, 3]] print[tuple[itertools.chain.from_iterable[t_2d]]] # [0, 1, 2, 3]
- Danh sách phẳng với
7t_2d = [[0, 1], [2, 3]] print[tuple[itertools.chain.from_iterable[t_2d]]] # [0, 1, 2, 3]
- Danh sách Flatten có toàn bộ danh sách
- So sánh tốc độ
- Danh sách phẳng với
- Flatten 3D và danh sách đa chiều và danh sách bất thường hơn
Cần phải xác định một chức năng mới để làm phẳng 3D và danh sách đa chiều hơn hoặc danh sách bất thường.
- Làm phẳng một mảng numpy với Ravel [] và Flatten []
Ngược lại, xem bài viết sau đây về cách chuyển đổi một
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 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]]
4 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]
Làm phẳng danh sách các danh sách [danh sách 2D]
Danh sách phẳng với t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
6
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]
6.- itertools.chain.from_iterable [] - Hàm tạo ra các trình lặp lại cho vòng lặp hiệu quả - Python 3.8.4 Tài liệu
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
6 trả về một trình lặp, 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]]
8. Không cần thiết phải lập danh sách khi sử dụng nó trong một tuyên bố 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.Một bộ dữ liệu 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 tuple với
l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
0. 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]]
8.- Chuyển đổi danh sách và tuple cho nhau trong Python
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
Chỉ có danh sách 2D có thể được làm phẳng với
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
6. Trong trường hợp danh sách đa chiều 3D trở lên, kết quả như sau.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]]
Một lỗi được nêu ra nếu nó chứa các đối tượng không có thiết kế như
l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
3 hoặc l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
4.l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
Các trường hợp có danh sách đa chiều 3D trở lên và danh sách bất thường được mô tả sau.
Danh sách phẳng 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ũng có thể làm phẳng một danh sách các danh sách với chức năng tích hợp
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7.Một giá trị ban đầu có thể được chỉ định là đối số thứ hai của
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
7. Nếu bạn vượt qua danh sách trống l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
8, hoạt động l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
9 của danh sách sẽ kết hợp các danh sách.- Thêm một mục vào danh sách trong Python [Phụ lục, mở rộng, chèn]
Lưu ý rằng giá trị mặc định của đối số thứ hai là
print[sum[l_2d, []]]
# [0, 1, 2, 3]
# print[sum[l_2d]]
# TypeError: unsupported operand type[s] for +: 'int' and 'list'
0, vì vậy nếu bị bỏ qua, một lỗi được nêu ra do hoạt động l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
9 với l_mix = [[0, 1], [2, 3], 4]
# print[list[itertools.chain.from_iterable[l_mix]]]
# TypeError: 'int' object is not iterable
3 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]]
4.print[sum[l_2d, []]]
# [0, 1, 2, 3]
# print[sum[l_2d]]
# TypeError: unsupported operand type[s] for +: 'int' and 'list'
Tuples có thể được xử lý theo cùng một cách.
print[sum[t_2d, []]]
# [0, 1, 2, 3]
Giống như
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
6, nó không hoạt động cho các danh sách hơn 3D hoặc bất thường.print[sum[l_3d, []]]
# [[0, 1], [2, 3], [4, 5], [6, 7]]
# print[sum[l_mix, []]]
# TypeError: can only concatenate list [not "int"] to list
Danh sách Flatten có toàn bộ 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 toàn bộ danh sách lồng nhau.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in matrix for x in row]
print[flat]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
Ví dụ trên tương đương với vòng lặp
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 lồng nhau sau.flat = []
for row in matrix:
for x in row:
flat.append[x]
print[flat]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
Trong trường hợp của danh sách hiểu ở trên, như với các phương pháp khác, chỉ có một cấp độ có thể được làm phẳng và một lỗi được nêu ra nếu các đối tượng không có thiết kế được bao gồm.
Cũng có thể làm cho việc làm tổ sâu hơn để hỗ trợ nhiều hơn ba chiều hoặc làm cho 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 đây để biết thêm thông tin về toàn bộ danh sách.
- Liệt kê sự hiểu biết 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]
7 rất 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]
6 hoặc danh sách toàn diện 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]
7 khi số lượng dòng lớn, và tốc độ xử lý và hiệu quả bộ nhớ là rất quan trọng.Mặc dù bạn phải nhập itertools,
t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
6 nhanh hơn so với các toàn bộ danh sách.Mã sau được đo bằng lệnh ma thuật
print[sum[t_2d, []]]
# [0, 1, 2, 3]
0 trên máy tính xách tay Jupyter. 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 thời gian trong Python
5 dòng:
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
0100 dòng:
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
110000 dòng:
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
2Flatten 3D và danh sách đa chiều và danh sách bất thường hơn
Cần phải xác định một chức năng mới để làm phẳng 3D và danh sách đa chiều hơn hoặc danh sách bất thường.
Mã mẫu sau đây dựa trên bài viết sau.
- Python - Flatten Một danh sách danh sách bất thường - Stack Overflow
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
3Loại phần tử
print[sum[t_2d, []]]
# [0, 1, 2, 3]
1 được kiểm tra bởi print[sum[t_2d, []]]
# [0, 1, 2, 3]
2 và được xử lý đệ quy.- Nhận và kiểm tra loại đối tượng trong Python: type [], isInstance []
Xác định xem
print[sum[t_2d, []]]
# [0, 1, 2, 3]
1 có được print[sum[t_2d, []]]
# [0, 1, 2, 3]
4 không. Bạn cần nhập thư viện tiêu chuẩn print[sum[t_2d, []]]
# [0, 1, 2, 3]
5.- bộ sưu tập.abc.iterable - Các lớp cơ sở trừu tượng cho các thùng chứa - Python 3.8.4 Tài liệu
Chuỗi
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
9 và chuỗi byte t_2d = [[0, 1], [2, 3]]
print[tuple[itertools.chain.from_iterable[t_2d]]]
# [0, 1, 2, 3]
0 cũng có thể lặp lại, vì vậy chúng bị loại trừ. Nếu không bị loại trừ, nó sẽ được tách ra cho mỗi nhân vật.Hàm này có thể được sử dụng trong tất cả các trường hợp.
import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
4Sẽ không có vấn đề gì nếu các đối tượng khác nhau như danh sách, bộ dữ liệu và
print[sum[t_2d, []]]
# [0, 1, 2, 3]
8 được bao gồm.import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
5Nếu bạn chỉ muốn xử lý danh sách, bạn không cần nhập
print[sum[t_2d, []]]
# [0, 1, 2, 3]
5. Tuples và print[sum[t_2d, []]]
# [0, 1, 2, 3]
8 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.import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
6Bạn có thể chỉ định nhiều loại bằng Tuple trong đối số thứ hai của
print[sum[t_2d, []]]
# [0, 1, 2, 3]
2.import itertools
l_2d = [[0, 1], [2, 3]]
print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
7