Bài học theo mô-đun (4/4)
Itertools cần thiết
Python có rất nhiều công cụ lặp: một số được tích hợp sẵn (luôn
có sẵn), những cái khác nằm trong mô-đun itertools của tiêu chuẩn
thư viện. Dưới đây là những điều quan trọng nhất.
enumerate: chỉ số + giá trị
Khi bạn cần cả chỉ mục và phần tử trong một vòng lặp:
for i, parola in enumerate(["a", "b", "c"]):
print(i, parola)
# 0 a
# 1 b
# 2 c
# parte da un altro numero:
for i, parola in enumerate(["a", "b", "c"], start=1):
print(i, parola)zip: lặp song song
Kết hợp nhiều phần tử lặp lại theo phần tử:
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]
for n, e in zip(nomi, eta):
print(f"{n} ha {e} anni")zip dừng ở vòng lặp ngắn nhất. Để sử dụng zip "dài"
itertools.zip_longest.
Xây dựng một lệnh từ hai danh sách song song:
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}itertools.chain: nối các vòng lặp
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]Không tạo danh sách trung gian: hữu ích cho các tệp, trình tạo, v.v.
itertools.count và repeat: vòng lặp vô hạn
from itertools import count, repeat
# count(start, step) — interi crescenti infiniti
for i in count(10, 2):
if i > 20: break
print(i)
# 10, 12, 14, 16, 18, 20
# repeat(x, n) — ripete lo stesso valore n volte (o all'infinito senza n)
list(repeat("ok", 3)) # ['ok', 'ok', 'ok']itertools.combinations
Tất cả các kết hợp (không lặp lại, không phụ thuộc vào thứ tự) của một chiều dài:
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]Biến thể được đặt hàng: permutations. Các biến thể có sự lặp lại:
combinations_with_replacement và product.
zip() cho từ điển và các lần lặp không cân bằng
Hàm zip() dừng ngay khi hết lần lặp đầu vào ngắn nhất. Nếu bạn muốn ghép nối các phần tử và giữ lại mọi giá trị vượt quá (điền chúng bằng giá trị mặc định như None), bạn có thể sử dụng zip_longest() từ mô-đun itertools. Ngoài ra, bạn có thể chuyển trực tiếp kết quả zip tới dict() để tạo ngay bản đồ khóa-giá trị.
Hãy thử nó
Cho các danh sách song song `countries = ['Italia', 'Francia', 'Spagna']` và `capitals = ['Roma', 'Parigi', 'Madrid']`, hãy xây dựng `mapping` dưới dạng dict {country: Capital}. Đánh giá `bản đồ`.
Hiển thị gợi ý
dict(zip(quốc gia, thủ đô))
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Cho `words = ['ciao', 'mondo', 'python']`, xây dựng `enumerated_items` dưới dạng danh sách các bộ dữ liệu (i, word) bắt đầu từ i=1. Đánh giá `enumerated_items`.
Hiển thị gợi ý
liệt kê (từ, bắt đầu = 1) → (i, giá trị) bộ dữ liệu.
Giải pháp khả dụng sau 3 lần thử
Thử thách bổ sung
Given two lists `keys = ['a', 'b', 'c']` and `values = [10, 20, 30]`, use `zip` to pair them and convert the result into a dictionary. Store the resulting dictionary in `my_dict` and evaluate it.
Hiển thị gợi ý
Sử dụng dict(zip(keys, value)) và gán nó cho my_dict.
Giải pháp khả dụng sau 3 lần thử