- vừa được xem lúc

10 Python Itertools khiến code bạn viết ngon hơn (P2)

0 0 27

Người đăng: Sang Hà Ngọc

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lập Trình Hướng Đối Tượng trong Python

Chào các bạn Trong bài này, bạn sẽ tìm hiểu về Lập trình hướng đối tượng (OOP) bằng Python và khái niệm cơ bản của nó và một số các ví dụ. Các bạn cùng tìm hiểu trong bài viết của mình nhé.

0 0 50

- vừa được xem lúc

Lớp trong Python

. Hôm ni, mình học tiếp về bạn “Lớp(class) trong python”, bài blog tiếp theo nằm trong series “Khám phá Đại Bản Doanh Python”(nội dung trong bài series này từ chủ yếu mình lấy từ python.org rồi viết lại hoặc dịch lại theo ngôn ngữ của mình).

0 0 33

- vừa được xem lúc

Tìm hiểu về thư viện Numpy trong Python(Phần 3)

Trong bài viết trước tôi đã giới thiệu cho bạn về NumPy, tìm hiểu về Mảng trong NumPy. Trong bài viết này chúng ta sẽ tiếp tục tìm hiểu về các kiểu dữ liệu khác trong NumPy.

0 0 140

- vừa được xem lúc

Hướng dẫn cài đặt Anaconda trên Ubuntu

Anaconda là một nền tảng mã nguồn mở về Data Science và Machine Learning trên Python thông dụng nhất hiện nay, Anaconda có vai trò đơn giản hóa việc triển khai và quản lí các gói cài đặt khi làm việc với Python. Anaconda được cài đặt dễ dàng trên 3 nền tảng hệ điều hành thông dụng hiện nay là Ubuntu

0 0 43

- vừa được xem lúc

Tùy chỉnh Exceptions trong Python

Chào các bạn trong bài viết này, mình sẽ giới thiệu với các bạn về cách tùy chỉnh các Exceptions trong Python.Mình sẽ giải thích cho các bạn hiểu và cách xử dụng chúng.

0 0 36

- vừa được xem lúc

Không gian tên(namspace) và phạm vi(scope) trong Python

. Khi mình ngồi học và dịch bài "Class trong Python" cho sê-ri "Khám Phá Đại Bản Doanh Python", mình đã đụng hai bạn này, và các bạn thật là trừu tượng và khó gặm. Thế là mình tìm kiếm và viết bài này để hiểu rõ hơn về hai bạn ấy, hi vọng bạn đọc thêm để hiểu về Python nhé.

0 0 49