Hướng dẫn python flatten list of bytes - python làm phẳng danh sách các byte

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
      t_2d = [[0, 1], [2, 3]]
      
      print[tuple[itertools.chain.from_iterable[t_2d]]]
      # [0, 1, 2, 3]
      
      6
    • 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
    • Danh sách Flatten có toàn bộ danh sách
    • So sánh tốc độ
  • 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

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

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]
0

100 dòng:

import itertools

l_2d = [[0, 1], [2, 3]]

print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
1

10000 dòng:

import itertools

l_2d = [[0, 1], [2, 3]]

print[list[itertools.chain.from_iterable[l_2d]]]
# [0, 1, 2, 3]
2

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.

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]
3

Loạ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]
4

Sẽ 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]
5

Nế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]
6

Bạ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

Làm thế nào để bạn kết hợp một danh sách các byte trong Python?

Các chuỗi byte Concatenate trong Python Bạn có thể kết hợp hai đối tượng byte X và Y trong Python bằng cách sử dụng [quá tải] Thêm hoạt động X+Y: Đây là gì? >>> y = B'world!add operation x+y : What is this? >>> y = b'world!

Làm thế nào để bạn tạo một mảng byte trong Python?

String = "Python rất thú vị."# Chuỗi có mã hóa 'UTF-8' ARR = byteArray [Chuỗi, 'UTF-8'] in [ARR] Chạy mã ..
Kích thước = 5. mảng = bytearray [kích thước] in [mảng] mã chạy ..
rlist = [1, 2, 3, 4, 5] mảng = bytearray [rlist] in [mảng] mã chạy ..

Làm cách nào để biến một danh sách trở lại thành một chuỗi trong Python?

Để chuyển đổi danh sách thành một chuỗi, hãy sử dụng khả năng hiểu danh sách Python và hàm tham gia [].Sự hiểu biết danh sách sẽ đi qua từng phần tử một và phương thức tham gia [] sẽ kết hợp các phần tử của danh sách thành một chuỗi mới và trả về nó làm đầu ra.use Python List Comprehension and the join[] function. The list comprehension will traverse the elements one by one, and the join[] method will concatenate the list's elements into a new string and return it as output.

Sự khác biệt giữa byte và bytearray trong Python là gì?

Sự khác biệt giữa byte [] và bytearray [] là byte [] trả về một đối tượng không thể sửa đổi và bytearray [] trả về một đối tượng có thể được sửa đổi.bytes[] returns an object that cannot be modified, and bytearray[] returns an object that can be modified.

Bài Viết Liên Quan

Chủ Đề