Chuyển đến nội dung chính
Mô-đun 6 · Bài học 4 trong tổng số 424/36 trong khóa học~12 min
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:

Python
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ử:

Python
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:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: nối các vòng lặp

Python
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

Python
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:

Python
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ó

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

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 đồ`.

Đang tải trình chỉnh sửa…
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

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

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`.

Đang tải trình chỉnh sửa…
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

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

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.

Đang tải trình chỉnh sửa…
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ử