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. Nhận một loạt các giá trị tích lũy dựa trên một lần lặp là một yêu cầu phổ biến. Với sự trợ giúp của itertools.accumulate()hàm, chúng ta không cần viết bất kỳ vòng lặp nào để thực hiện.
6. itertools.accumulate(): Generate Accumulated Items from an Iterable
Nhận một loạt các giá trị tích lũy dựa trên một lần lặp là một yêu cầu phổ biến, ví dụ như tổng hay tích tất cả các số trong 1 list. ta có thể sử dụng itertools.accumulate
để xử lý vấn đề này.
import itertools
import operator nums = [1, 2, 3, 4, 5]
print(list(itertools.accumulate(nums, operator.mul)))
# [1, 2, 6, 24, 120]
Nếu không muốn dùng operator.mul
thì chương trình chúng ta sẽ viết dạng raw như sau hay hoàn toàn có thể thay operator *
thành +
:
import itertools nums = [1, 2, 3, 4, 5]
print(list(itertools.accumulate(nums, lambda a, b: a + b)))
# [1, 3, 6, 10, 15]
7. itertools.repeat(), itertools.cycle(), itertools.count(): Make Infinite Iterables
Trong một số trường hợp, chúng ta cần có một vòng lặp vô hạn. Có 3 chức năng hữu ích sau:
itertools.repeat()
: Tạo lặp đi lặp lại cùng một phần tử
Ví dụ, chúng ta có thể nhận được ba "Name" giống nhau như sau:
import itertools
print(list(itertools.repeat('Name', 3)))
# ['Name', 'Name', 'Name']
Tuy nhiên trong trường hợp này thì ta có thể viết ngắn gọn như sau:
print(["Name"] * 3)
# ['Name', 'Name', 'Name']
itertools.cycle
: sẽ lặp không dừng trừ khi gặp break
import itertools count = 0 for c in itertools.cycle([1, 2, 3]): if count >= 4: break else: print(c) count += 1
# 1 2 3 1
itertools.count()
: tạo ra một dãy số vô hạn
import itertools for i in itertools.count(0, 2): if i == 6: break else: print(i)
# 0 2 4
8. itertools.pairwise(): Get Tuples of Pairs Easily
Kể từ Python 3.10, itertools modules
có một chức năng mới có tên pairwise
. Nó là một công cụ nhỏ và gọn gàng để tạo các cặp liên tiếp từ một lần lặp.
import itertools letters = [1, 2, 3, 4, 4] result = itertools.pairwise(letters) print(list(result))
# [(1, 2), (2, 3), (3, 4), (4, 4)]
9. itertools.takewhile(): Filter Elements in a Different Way
itertools.takewhile()
trả về một iterator
tạo ra các phần tử từ một iterable
miễn là hàm truyền vào trả về True.
import itertools nums = [1, 2, 3, 4, 2023] print(list(itertools.takewhile(lambda x: x < 100, nums)))
# [1, 2, 3, 4]
Nhìn ví dụ trên thì có vẻ là nó giống filer
nhưng mà thực tế là 2 hàm này hoàn toàn khác nhau. filter
sẽ duyệt qua toàn bộ danh sách còn itertools.takewhile()
sẽ dừng khi hàm truyền vào trả về giá trị False.
import itertools nums = [1, 2, 2023, 3, 4] print(list(itertools.takewhile(lambda x: x < 100, nums)))
# [1, 2]
10. itertools.dropwhile(): A Reverse Operation of itertools.takewhile()
Chức năng này có vẻ như là một ý tưởng đảo ngược của itertools.takewhile()
.
itertools.takewhile()
trảvề các phần tử của iterable
miễn là hàm truyền vào vẫn trả về True, trong khi đó itertools.dropwhile()
loại bỏ các phần tử của iterable
miễn là hàm truyền vào vẫn trả True và sau đó trả về các phần tử còn lại.
import itertools nums = [1, 2, 2023, 3, 4] print(list(itertools.dropwhile(lambda x: x < 100, nums)))
# [2023, 3, 4]
Thanks for reading ~~~
Nguồn: Medium