Python - Unpack Tuple Items

Unpack Tuple Items

Thuật ngữ "unpacking" đề cập đến quá trình phân tích tuple các mục trong variables riêng lẻ. Trong Python, dấu ngoặc đơn là ký tự phân cách mặc định cho một đại diện văn bản của đối tượng chuỗi.

Các câu lệnh sau để khai báo một tuple là giống nhau.

>>> t1 = (x,y)
>>> t1 = x,y
>>> type (t1)
<class 'tuple'>

Example

Để lưu trữ các mục trong tuple vào các biến riêng lẻ, hãy sử dụng nhiều biến ở bên trái của toán tử gán, như được thể hiện trong ví dụ sau −

tup1 = (10,20,30)
x, y, z = tup1
print ("x: ", x, "y: ", "z: ",z)

Nó sẽ tạo ra output

x: 10 y: 20 z: 30

Đó là cách mà tuple được giải nén vào các biến riêng lẻ.

Trong ví dụ trên, số lượng biến bên trái của toán tử gán bằng với số lượng phần tử trong tuple. Vậy nếu số lượng không bằng với số phần tử thì sao?

ValueError While Unpacking a Tuple

Nếu số lượng biến nhiều hơn hoặc ít hơn độ dài của tuple, Python sẽ phát sinh một ValueError.

Example

tup1 = (10,20,30)
x, y = tup1
x, y, p, q = tup1

Nó sẽ tạo ra output

  x, y = tup1
  ^^^^
ValueError: too many values to unpack (expected 2)
  x, y, p, q = tup1
  ^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 3)

Unpack Tuple Items Using Asterisk (*)

Trong trường hợp như vậy, ký hiệu "*" được sử dụng để giải nén. Thêm tiền tố "*" vào "y", như được trình bày dưới đây −

Example 1

tup1 = (10,20,30)
x, *y = tup1
print ("x: ", "y: ", y)

Nó sẽ tạo ra output

x: y: [20, 30]

Giá trị đầu tiên trong tuple được gán cho "x", và các mục còn lại được gán cho "y" trở thành một danh sách.

Example 2

Trong ví dụ này, tuple chứa 6 giá trị và có 3 biến để được giải nén. Chúng ta thêm tiền tố "*" vào biến thứ hai.

tup1 = (10,20,30, 40, 50, 60)
x, *y, z = tup1
print ("x: ",x, "y: ", y, "z: ", z)

Nó sẽ tạo ra output

x: 10 y: [20, 30, 40, 50] z: 60

Ở đây, các giá trị được giải nén vào "x" và "z" trước, và sau đó các giá trị còn lại được gán cho "y" dưới dạng một danh sách.

Example 3

Nếu chúng ta thêm "*" vào biến đầu tiên thì sao?

tup1 = (10,20,30, 40, 50, 60)
*x, y, z = tup1
print ("x: ",x, "y: ", y, "z: ", z)

Nó sẽ tạo ra output

x: [10, 20, 30, 40] y: 50 z: 60

Ở đây, tuple được giải nén theo cách mà các biến riêng lẻ nhận giá trị đầu tiên, để lại các giá trị còn lại cho danh sách "x".