Chuyển đến nội dung chính
Mô-đun 3 · Bài học 2 trong tổng số 410/36 trong khóa học~10 min
Bài học theo mô-đun (2/4)

Tuples và giải nén

Bộ là một chuỗi có thứ tự và không thể thay đổi: một khi được tạo, bạn có thể không còn thay đổi các yếu tố của nó. Nó được viết bằng dấu ngoặc đơn (mặc dù những gì thực sự định nghĩa nó là dấu phẩy).

Tạo một bộ dữ liệu

Python
vuota = ()
una = (42,)             # ATTENZIONE: senza virgola, (42) è solo 42 fra parentesi
coords = (10, 20)
mista = ("Ada", 36, True)

Truy cập theo chỉ mục và cắt lát hoạt động giống hệt như đối với danh sách: coords[0], coords[-1], mista[:2].

Khi nào nên sử dụng bộ dữ liệu thay vì danh sách

  • Khi giá trị đại diện cho một bộ sưu tập cố định không được thay đổi (tọa độ, ngày là (year, month, day), phiên bản (1, 2, 3)).
  • Khi bạn cần sử dụng giá trị làm khóa từ điển hoặc làm thành phần của a set: chỉ có thể sử dụng các đối tượng bất biến (có thể băm).
  • Khi muốn báo hiệu cho người đọc mã biết giá trị đó là "đông lạnh".

Giải nén: tính năng thay đổi cách bạn viết Python

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

Nó cũng hoạt động mà không cần dấu ngoặc đơn (chính dấu phẩy xác định bộ dữ liệu):

Python
x, y = 10, 20

Và nó cho phép hoán đổi mà không cần biến tạm thời, một Python thuần túy thành ngữ:

Python
a, b = 1, 2
a, b = b, a
a, b   # (2, 1)

Giải nén bằng * (phần còn lại)

Khi bạn muốn chụp "cái đầu tiên và cái còn lại" hoặc "cái đầu tiên, cái cuối cùng, ở giữa":

Python
primo, *resto = [1, 2, 3, 4, 5]
primo   # 1
resto   # [2, 3, 4, 5]

primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro  # [2, 3, 4]

Đây được gọi là bài tập có gắn dấu sao: ngôi sao thu thập mọi thứ vẫn còn trong một danh sách.

Bẫy tuple một phần tử

(42) không phải là một bộ dữ liệu, đó là số 42 bên trong dấu ngoặc đơn. Để thực hiện một bộ dữ liệu một phần tử bạn cần có dấu phẩy: (42,). Không có nó, mọi hoạt động thất bại một cách khó hiểu.

Python
x = (42)
type(x)   # <class 'int'>
x = (42,)
type(x)   # <class 'tuple'>

Bộ phần tử đơn

Để tạo một bộ chỉ chứa một phần tử, chỉ dấu ngoặc đơn là không đủ: bạn phải chèn dấu phẩy ở cuối, ví dụ t = (42,). Nếu không có dấu phẩy, Python coi dấu ngoặc đơn là nhóm toán học đơn giản, tạo ra một số nguyên đơn giản 42.

Hãy thử nó

tập thể dục#python.m3.l2.e1
Nỗ lực: 0Đang tải…

Cho `a = 1` và `b = 2`, hoán đổi giá trị của chúng trong một dòng duy nhất (giải nén bộ dữ liệu) và đánh giá bộ dữ liệu (a, b).

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

a, b = b, a

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#python.m3.l2.e2
Nỗ lực: 0Đang tải…

Từ danh sách `voti = [7, 5, 8, 6, 9]`, dùng giải nén để trích lớp đầu tiên thành `primo`, lớp cuối cùng thành `ultimo` và các lớp còn lại thành `centro`. Đánh giá `(primo, centro, ultimo)`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.

Giải pháp khả dụng sau 3 lần thử

Thử thách bổ sung

tập thể dục#python.m3.l2.e3
Nỗ lực: 0Đang tải…

Given the tuple `point = (4, 5, 6)`, use unpacking to assign the three values to the variables `x`, `y`, `z` respectively. Then, calculate the sum of `x`, `y`, and `z` and store it in `coord_sum`. Finally, evaluate `coord_sum`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng x, y, z = point để trích xuất ba tọa độ trong một câu lệnh.

Giải pháp khả dụng sau 3 lần thử