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
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
nome, anni = ("Ada", 36)
nome # 'Ada'
anni # 36Nó 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):
x, y = 10, 20Và 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ữ:
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":
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.
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ó
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).
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ừ 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)`.
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
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`.
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ử