Python được ưa chuộng vì đơn giản là nó đơn giản :V
Không chỉ vậy mà Python được ưa chuộng còn bởi nó có nhiều built-in modules được thiết kế tốt giúp chúng ta triển khai các chức năng phổ biến một cách hiệu quả.
Itertools modules là một ví dụ điển hình, cung cấp nhiều công cụ mạnh mẽ để chúng tôi thao tác với các vòng lặp Python mà code ngắn gọn hơn.
Làm ít mà hưởng nhiều. Đây là những gì chính xác khi dùng itertools modules.
1. Itertools.product(): Xử lý nested loop (for lồng for):
Giả sử ta cần kiểm tra xem trong 3 list có tồn tại 3 số bất kỳ lần lượt thuộc 3 list mà có tổng là một số cho trước. Dưới đây là cách tư duy thông thường khi dùng 3 vòng for lồng nhau.
# normal case
list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7] for a in list_a: for b in list_b: for c in list_c: if a + b + c == 2077: print(a, b, c)
# 70 2000 7
Còn đây là khi dùng product
của itertools
# Using product
from itertools import product list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7] for a, b, c in product(list_a, list_b, list_c): if a + b + c == 2077: print(a, b, c)
# 70 2000 7
2. Itertools.compress(): Lọc dữ liệu
Vấn đề: Khi chúng ta có 1 danh sách tất cả các trường và mỗi lần ta sẽ cần lấy 1 số trường trong danh sách ra. Ta có thể dùng compress để lọc ra các fields
cần lấy.
import itertools
fields = ['product_id', 'product_name', 'price', 'pulisher', 'created_at', 'updated_at']
selector = [1, 1, 0, 0, 0, 0]
print(list(itertools.compress(fields, selector)))
# ['product_id', 'product_name']
Thay vì dùng các selector là 0 hay 1 thì ta có thể dùng dưới dạng True
False
selector = [True, True, False, False, False, False]
3. itertools.groupby(): nhóm các phần tử lại
Hàm itertools.groupby()
là một cách thuận tiện để nhóm các mục trùng lặp liền kề của một lần lặp.
from itertools import groupby for key, group in groupby('pythonnNN'): print(key, list(group))
# p ['p']
# y ['y']
# t ['t']
# h ['h']
# o ['o']
# n ['n', 'n']
# N ['N', 'N']
Ngoài ra, ta cũng có thể truyền thêm 1 lambda function
làm argument thứ hai của groupby
from itertools import groupby for key, group in groupby('pythonnNN', lambda x: x.upper()): print(key, list(group))
4. itertools.combinations(): Sinh tổ hợp của 1 list
Ta có thể dùng itertools.combinations()
để sinh tổ hợp một cách đơn giản như sau:
import itertools author = [1, 2, 3, 4]
result = itertools.combinations(author, 2)
for x in result: print(x)
# (1, 2)
# (1, 3)
# (1, 4)
# (2, 3)
# (2, 4)
# (3, 4)
5. itertools.permutations(): Sinh hoán vị của 1 list
Ta có thể dùng itertools.combinations()
để sinh tổ hợp một cách đơn giản như sau:
import itertools author = [1, 2, 3]
result = itertools.permutations(author, 2) for x in result: print(x)
# (1, 2)
# (1, 3)
# (2, 1)
# (2, 3)
# (3, 1)
# (3, 2)
Chào và hẹn gặp lại ở P2 nhé
Nguồn: Medium