- 1 1. Giới thiệu
- 2 2. Cơ bản của vòng lặp for trong Python
- 3 3. Sử dụng hàm enumerate
- 4 4. Lặp đồng thời nhiều chuỗi với hàm zip
- 5 5. List Comprehensions (List Comprehension)
- 6 6. Duyệt qua Dictionary
- 7 7. Lặp Qua Sets
- 8 8. Sử Dụng Module itertools
- 9 9. Tổng kết
1. Giới thiệu
Vòng lặp Python là một yếu tố thiết yếu để cải thiện hiệu quả và khả năng đọc của chương trình. Hầu hết các ngôn ngữ lập trình có cấu trúc vòng lặp gọi là foreach, cho phép lặp dễ dàng qua từng phần tử của một chuỗi, nhưng Python không có vòng lặp foreach trực tiếp. Do đó, Python sử dụng các tính năng khác nhau như vòng lặp for, enumerate, và zip để đạt được xử lý tương tự. Bài viết này giải thích cách thực hiện lặp trong Python tương ứng với foreach, từ góc nhìn đơn giản và thực tế.
Tại sao Python không có foreach?
Python không áp dụng rõ ràng foreach vì thiết kế ngôn ngữ nhấn mạnh vào sự đơn giản và linh hoạt. Vòng lặp for và comprehensions được thiết kế để làm cho nhiều nhiệm vụ lặp dễ thực hiện. Python cung cấp các tính năng mạnh mẽ để lặp qua chỉ số và nhiều chuỗi đồng thời, vì vậy ngay cả không có foreach, các biểu thức tương tự vẫn có thể thực hiện được.
Lợi ích của Lặp trong Python
Lặp trong Python mang lại những lợi thế sau.
- Ngắn gọn : Mã có thể được viết ngắn gọn hơn so với các ngôn ngữ khác, dẫn đến khả năng đọc cao hơn.
- Linh hoạt : Lặp thống nhất có thể thực hiện trên nhiều chuỗi và các cấu trúc dữ liệu khác nhau.
- Comprehensions : Danh sách, từ điển, và các bộ sưu tập khác có thể được tạo đơn giản, giúp dễ dàng viết mã hiệu quả.
Trong chương tiếp theo, chúng ta sẽ xem xét chi tiết về cách sử dụng cơ bản của vòng lặp for như một khía cạnh cơ bản của lặp trong Python.
2. Cơ bản của vòng lặp for trong Python
Vòng lặp for, một tính năng lặp cốt lõi trong Python, thường được sử dụng để xử lý từng phần tử của một chuỗi. Ở đây chúng tôi cung cấp giải thích chi tiết về cách sử dụng cơ bản của vòng lặp for cho các chuỗi như danh sách và bộ.
Cú pháp cơ bản của vòng lặp for
Vòng lặp for trong Python được viết bằng cú pháp sau:
for element in sequence:
process
- Phần tử : Biến nhận từng mục của chuỗi theo thứ tự trong mỗi lần lặp.
- Chuỗi : Cấu trúc dữ liệu có thể lặp như danh sách, bộ, hoặc chuỗi.
Ví dụ 1: Lặp qua một danh sách
Đầu tiên, hãy xem một ví dụ vòng lặp for cơ bản sử dụng danh sách.
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
Trong mã trên, từng phần tử của danh sách fruits được gán theo thứ tự cho fruit, và print(fruit) được thực thi. Ví dụ này tạo ra đầu ra sau.
apple
banana
cherry
Ví dụ 2: Lặp qua một chuỗi
Chuỗi cũng là chuỗi, vì vậy bạn có thể lặp qua từng ký tự.
text = "hello"
for char in text:
print(char)
Trong mã này, từng ký tự của chuỗi text được gán theo thứ tự cho char và in ra. Kết quả như sau.
h
e
l
l
o
Ví dụ 3: Lặp qua một phạm vi chỉ định (hàm range)
Nếu bạn muốn lặp qua một phạm vi số chỉ định, sử dụng hàm range().
for i in range(5):
print(i)
Mã này gán các giá trị từ 0 đến 4 theo thứ tự cho i và in chúng.
0
1
2
3
4
Cách sử dụng hàm range
range(n): Tạo số từ 0 đếnn-1.range(start, stop): Tạo số từstartđếnstop-1.range(start, stop, step): Tạo số từstartđếnstop-1với bướcstep.
Các ví dụ thực tế của vòng lặp for
Tính tổng của một mảng
Đây là một ví dụ sử dụng vòng lặp for để tính tổng các số trong danh sách.
numbers = [1, 2, 3, 4, 5]
total = 0
for number in numbers:
total += number
print("Total:", total)
Trong mã này, các số trong danh sách được cộng vào total theo thứ tự, và tổng cuối cùng được in.
Xử lý có điều kiện của các phần tử
Bạn cũng có thể đặt điều kiện bên trong vòng lặp for để xử lý các phần tử dựa trên các điều kiện nhất định.
numbers = [1, 2, 3, 4, 5, 6]
for number in numbers:
if number % 2 == 0:
print(number, "is even")
else:
print(number, "is odd")
Mã này xác định xem mỗi số là chẵn hay lẻ và in kết quả.
Vòng lặp for lồng nhau (cấu trúc lồng nhau)
Vòng lặp for có thể được lồng nhau, điều này hữu ích khi xử lý nhiều danh sách hoặc danh sách hai chiều.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in matrix:
for item in row:
print(item, end=" ")
print() # newline
Mã này hiển thị tất cả các phần tử của một danh sách hai chiều (một danh sách các danh sách).
1 2 3
4 5 6
7 8 9
Tóm tắt
Vòng lặp for của Python là một cấu trúc cơ bản để lặp qua các chuỗi một cách hiệu quả như danh sách, bộ dữ liệu và chuỗi. Bằng cách kết hợp hàm range() với các câu lệnh điều kiện và lồng nhau, bạn có thể thực hiện nhiều quy trình một cách đơn giản. Hiểu cấu trúc cơ bản này cho phép bạn thực hiện lặp linh hoạt tương đương với foreach. 
3. Sử dụng hàm enumerate
Khi lặp qua một chuỗi trong Python, đôi khi bạn muốn lấy cả chỉ số danh sách và phần tử cùng lúc. Trong những trường hợp như vậy, sử dụng hàm enumerate cho phép bạn lấy chỉ số và phần tử một cách hiệu quả trong khi lặp. Ở đây, chúng tôi sẽ giải thích chi tiết cách sử dụng cơ bản và các ví dụ thực tế của hàm enumerate.
Cú pháp cơ bản của hàm enumerate
Bằng cách sử dụng hàm enumerate, mỗi phần tử trong chuỗi được gán một chỉ số, tạo ra các cặp chỉ số và phần tử. Nó được sử dụng với cú pháp sau.
for index, element in enumerate(sequence):
process
- Chỉ số : số chỉ số tương ứng với mỗi phần tử trong chuỗi.
- Phần tử : mỗi phần tử trong chuỗi.
- Chuỗi : một cấu trúc dữ liệu có thể lặp như danh sách, bộ dữ liệu hoặc chuỗi.
Ví dụ 1: Lấy chỉ số danh sách và phần tử cùng lúc
Một ví dụ xử lý danh sách bằng cách lấy chỉ số và phần tử cùng lúc sử dụng enumerate.
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
Mã này xuất ra mỗi phần tử trong danh sách fruits cùng với chỉ số của nó.
0: apple
1: banana
2: cherry
Ví dụ 2: Chỉ định chỉ số bắt đầu
Hàm enumerate có tùy chọn chỉ định chỉ số bắt đầu. Mặc định, chỉ số bắt đầu từ 0, nhưng bạn có thể đặt bất kỳ giá trị nào làm chỉ số bắt đầu.
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
Mã này xuất ra chỉ số bắt đầu từ 1.
1: apple
2: banana
3: cherry
Các ví dụ thực tế của hàm enumerate
Hiển thị tiến độ danh sách nhiệm vụ
Hàm enumerate cũng có thể hữu ích khi chỉ số hữu ích, chẳng hạn như trong quản lý nhiệm vụ. Ví dụ dưới đây hiển thị tiến độ của mỗi nhiệm vụ dưới dạng danh sách.
tasks = ["Laundry", "Cleaning", "Cooking"]
for index, task in enumerate(tasks, start=1):
print(f"Task{index}: {task} - Completed")
Mã này xuất ra mỗi nhiệm vụ trong danh sách nhiệm vụ với số thứ tự.
Task1: Laundry - Completed
Task2: Cleaning - Completed
Task3: Cooking - Completed
Xử lý dựa trên điều kiện cụ thể trong mảng
Khi bạn muốn xử lý các phần tử tại vị trí cụ thể trong mảng sử dụng chỉ số của chúng, enumerate cũng rất tiện lợi.
numbers = [10, 20, 30, 40, 50]
for index, number in enumerate(numbers):
if index % 2 == 0:
print(f"Element {number} at index {index} has an even index")
Mã này xuất ra các phần tử nằm tại chỉ số chẵn.
Element 10 at index 0 has an even index
Element 30 at index 2 has an even index
Element 50 at index 4 has an even index
Tóm tắt
Hàm enumerate cực kỳ hữu ích để lấy chỉ số và phần tử đồng thời. Vì bạn có thể chỉ định chỉ số bắt đầu, nó phù hợp cho việc đánh số danh sách và xử lý dựa trên các điều kiện cụ thể. Đặc biệt, nó giúp dễ dàng theo dõi mỗi phần tử trong một danh sách, cải thiện khả năng đọc và bảo trì mã.
4. Lặp đồng thời nhiều chuỗi với hàm zip
Sử dụng hàm zip của Python, bạn có thể lặp qua nhiều chuỗi đồng thời. Tính năng này rất hữu ích khi bạn muốn xử lý danh sách, tuple hoặc các chuỗi khác song song. Ở đây chúng tôi giới thiệu cách sử dụng cơ bản và các ví dụ thực tế của hàm zip.
Cú pháp cơ bản của hàm zip
Hàm zip nhận nhiều chuỗi làm đối số, nhóm các phần tử của chúng thành tuple và tạo ra một đối tượng có thể lặp. Sử dụng hàm zip với cú pháp sau.
for element1, element2, ... in zip(sequence1, sequence2, ...):
process
- element1, element2… : Một phần tử từ mỗi chuỗi được nhóm thành một tuple và được gán cho các biến theo thứ tự. sequence1, sequence2…* : Chỉ định các chuỗi bạn muốn xử lý cùng nhau, chẳng hạn danh sách hoặc tuple.
Ví dụ 1: Lặp qua hai danh sách đồng thời
Ví dụ này lặp qua hai danh sách đồng thời bằng hàm zip và in ra các phần tử kết hợp từ mỗi danh sách.
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}'s score is {score}")
Mã này lặp qua danh sách names và danh sách scores cùng một lúc, xuất tên và điểm số.
Alice's score is 85
Bob's score is 92
Charlie's score is 78
Ví dụ 2: Lặp qua ba hoặc nhiều danh sách đồng thời
Hàm zip cũng hỗ trợ ba hoặc nhiều chuỗi, vì vậy bạn có thể xử lý nhiều danh sách hoặc tuple cùng lúc.
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
grades = ["B", "A", "C"]
for name, score, grade in zip(names, scores, grades):
print(f"{name}'s score is {score}, and the grade is {grade}")
Mã này xuất ra tên, điểm số và điểm chữ cùng nhau.
Alice's score is 85, and the grade is B
Bob's score is 92, and the grade is A
Charlie's score is 78, and the grade is C
Hành vi của hàm zip khi các chuỗi có độ dài khác nhau
Khi sử dụng hàm zip, nếu các chuỗi có độ dài khác nhau, việc lặp sẽ dừng lại ở độ dài của chuỗi ngắn nhất. Hãy kiểm tra điều này trong ví dụ đây.
names = ["Alice", "Bob"]
scores = [85, 92, 78] # 3 elements
for name, score in zip(names, scores):
print(f"{name}'s score is {score}")
Trong trường hợp này, vì names chỉ có hai phần tử, phần tử thứ ba sẽ bị bỏ qua và kết quả sẽ như sau.
Alice's score is 85
Bob's score is 92
Các ví dụ thực tế của hàm zip
Hiển thị các phần tử danh sách dưới dạng cặp
Sử dụng hàm zip, bạn cũng có thể ghép các phần tử liền kề trong một danh sách để xử lý.
data = [10, 20, 30, 40]
for x, y in zip(data, data[1:]):
print(f"Pair: ({x}, {y})")
Mã này ghép các phần tử liền kề và in chúng ra.
Pair: (10, 20)
Pair: (20, 30)
Pair: (30, 40)
Tóm tắt
Hàm zip là một công cụ mạnh mẽ để lặp qua nhiều chuỗi cùng một lúc. Nó hỗ trợ các tác vụ như ghép hoặc kết hợp các dữ liệu khác nhau và cho phép bạn viết mã ngắn gọn. Khi làm việc với các chuỗi có độ dài khác nhau, việc sử dụng zip_longest khi cần thiết giúp việc lặp trở nên linh hoạt. 
5. List Comprehensions (List Comprehension)
Python bao gồm một kỹ thuật mạnh mẽ gọi là “list comprehension” để tạo ra các chuỗi một cách đơn giản. Bằng cách sử dụng list comprehension, việc tạo danh sách bằng vòng lặp for truyền thống trở nên ngắn gọn và dễ đọc hơn. Chương này giải thích cách sử dụng cơ bản của list comprehension, kèm theo các ví dụ thực tế, để minh họa sự tiện lợi chúng.
Cú pháp cơ bản của List Comprehensions
List comprehensions được viết bằng cú pháp sau.
[expression for element in sequence]
- Expression : Phép toán được áp dụng cho mỗi phần tử.
- Element : Biến nhận mỗi mục từ chuỗi theo thứ tự.
- Sequence : Cấu trúc dữ liệu có thể lặp lại như danh sách, tuple hoặc chuỗi.
Ví dụ 1: List Comprehension cơ bản
Ví dụ, để tạo một danh sách mới bằng cách nhân đôi mỗi phần tử trong một danh sách, sử dụng vòng lặp for truyền thống sẽ được viết như sau.
numbers = [1, 2, 3, 4, 5]
doubled = []
for number in numbers:
doubled.append(number * 2)
print(doubled)
Sử dụng list comprehension, đoạn mã trên có thể được viết ngắn gọn như sau.
numbers = [1, 2, 3, 4, 5]
doubled = [number * 2 for number in numbers]
print(doubled)
Kết quả sẽ như sau.
[2, 4, 6, 8, 10]
List Comprehensions có điều kiện
Trong list comprehensions, bạn có thể thêm một biểu thức điều kiện để chỉ xử lý các phần tử cụ thể. Điều kiện được viết dưới dạng for tiếp theo là if.
Ví dụ 2: List Comprehension có điều kiện
Ví dụ, để nhân đôi chỉ các số chẵn trong một danh sách, bạn sẽ viết:
numbers = [1, 2, 3, 4, 5]
doubled_even = [number * 2 for number in numbers if number % 2 == 0]
print(doubled_even)
Đoạn mã này chỉ lấy các số chẵn và tạo một danh sách mới với chúng được nhân đôi.
[4, 8]
Ví dụ 3: List Comprehension có điều kiện sử dụng else
Nếu bạn muốn áp dụng các xử lý khác nhau cho mỗi phần tử bằng cách phân nhánh điều kiện, bạn có thể thêm else trước if.
numbers = [1, 2, 3, 4, 5]
result = [number * 2 if number % 2 == 0 else number for number in numbers]
print(result)
Đoạn mã này sẽ nhân đôi số khi nó là số chẵn, và nếu không sẽ thêm số gốc vào danh sách.
[1, 4, 3, 8, 5]
Tóm tắt
Bằng cách tận dụng list comprehensions, bạn có thể tạo danh sách ngắn gọn và hiệu quả hơn so với các vòng lặp for. Kết hợp xử lý điều kiện đơn giản và các thao tác cụ thể cho phép bạn viết mã Pythonic hơn. Tuy nhiên, các comprehension phức tạp có thể làm giảm tính dễ đọc, vì vậy cần sử dụng chúng trong các tình huống phù hợp.
6. Duyệt qua Dictionary
Dictionary (dict) là một trong những cấu trúc dữ liệu chính trong Python, được dùng để lưu trữ các cặp khóa‑giá trị. Giống như danh sách và tuple, dictionary cũng có thể được duyệt, nhưng với dictionary bạn thường lấy khóa, giá trị, hoặc cả hai. Chương này giải thích chi tiết cách duyệt dictionary và các hàm hữu ích.
Duyệt Dictionary cơ bản
Trong việc duyệt dictionary cơ bản, bạn sử dụng vòng lặp for để lấy khóa, giá trị hoặc cặp khóa‑giá trị.
Ví dụ 1: Duyệt chỉ các khóa
Khi bạn duyệt một dictionary bằng vòng lặp for, mặc định nó sẽ trả về chỉ các khóa.
person = {"name": "Taro", "age": 30, "occupation": "Engineer"}
for key in person:
print(key)
Đoạn mã này in ra tất cả các khóa của dictionary theo thứ tự.
name
age
occupation
Ví dụ 2: Duyệt chỉ các giá trị
Để duyệt các giá trị của dictionary, sử dụng phương thức values().
person = {"name": "Taro", "age": 30, "occupation": "Engineer"}
for value in person.values():
print(value)
Đoạn mã này in ra tất cả các giá trị của dictionary theo thứ tự.
Taro
30
Engineer
Ví dụ 3: Duyệt cặp khóa‑giá trị
Nếu bạn muốn lấy cả khóa và giá trị cùng lúc, sử dụng phương thức items(). Phương thức này trả về mỗi cặp dưới dạng tuple, có thể giải nén thành hai biến.
person = {"name": "Taro", "age": 30, "occupation": "Engineer"}
for key, value in person.items():
print(f"{key}: {value}")
Đoạn mã này in ra tất cả các cặp khóa‑giá trị.
name: Taro
age: 30
occupation: Engineer
Duyệt Dictionary có điều kiện
Nếu bạn muốn lấy chỉ những cặp thỏa mãn một điều kiện cụ thể trong dictionary, bạn có thể chỉ định điều kiện bằng câu lệnh if.
Ví dụ 4: Xuất ra chỉ các cặp có giá trị cụ thể
Ví dụ, để xuất ra chỉ các mục có tuổi từ 30 trở lên, bạn sẽ viết:
people = {"Taro": 30, "Hanako": 25, "Jiro": 35}
for name, age in people.items():
if age >= 30:
print(f"{name} is at least 30 years old")
Mã này chỉ xuất ra các cặp thỏa mãn điều kiện.
Taro is at least 30 years old
Jiro is at least 30 years old
Dictionary Comprehensions
Tương tự như list comprehensions, dictionary comprehensions cũng có thể thực hiện được. Chúng cho phép bạn tạo một dictionary mới dựa trên một điều kiện.
Ví dụ 5: Tạo một Dictionary Mới với Điều Kiện
Ví dụ, để tạo một dictionary mới chỉ bao gồm những người có tuổi từ 30 trở lên, bạn có thể viết:
people = {"Taro": 30, "Hanako": 25, "Jiro": 35}
adults = {name: age for name, age in people.items() if age >= 30}
print(adults)
Kết quả đầu ra của mã này như sau.
{'Taro': 30, 'Jiro': 35}
Tóm Tắt
Trong Python, bạn có thể lặp qua dictionary bằng cách lấy keys, values hoặc các cặp key-value. Ngoài ra, dictionary comprehensions có điều kiện và xử lý dictionary lồng nhau cho phép xử lý dữ liệu linh hoạt. Dictionary là một cấu trúc dữ liệu rất hữu ích để tổ chức và quản lý dữ liệu phức tạp, và việc sử dụng các kỹ thuật lặp phù hợp sẽ tăng cường tính hữu ích của chúng. 
7. Lặp Qua Sets
Một set (set) là một cấu trúc dữ liệu lưu trữ các phần tử duy nhất, hữu ích để kiểm tra xem một phần tử cụ thể có tồn tại hay không hoặc loại bỏ các phần tử trùng lặp từ một list. Vì các set của Python không có thứ tự, không giống như list hoặc tuple, bạn không thể truy cập các phần tử theo chỉ số, nhưng bạn có thể lặp qua tất cả các phần tử bằng vòng lặp for.
Trong chương này, chúng ta sẽ bao gồm các cơ bản về lặp qua sets, lặp có điều kiện, và các phương pháp lặp liên quan đến các hoạt động đặc trưng của set.
Lặp Set Cơ Bản
Để xử lý mọi phần tử trong một set, sử dụng vòng lặp for. Vì set không có thứ tự, thứ tự xử lý có thể khác nhau mỗi lần.
Ví dụ 1: In Tất Cả Các Phần Tử Của Một Set
Đầu tiên, hãy xem một ví dụ lặp cơ bản in mọi phần tử trong một set.
fruits = {"apple", "banana", "cherry"}
for fruit in fruits:
print(fruit)
Thứ tự đầu ra không được đảm bảo, nhưng mỗi phần tử chỉ xuất hiện một lần.
banana
cherry
apple
Lặp Set Có Điều Kiện
Bạn cũng có thể xử lý các phần tử set thỏa mãn các điều kiện cụ thể. Sử dụng câu lệnh if để lọc dựa trên điều kiện.
Ví dụ 2: In Chỉ Các Phần Tử Thỏa Mãn Điều Kiện
Ví dụ, để xuất ra chỉ các chuỗi trong set có độ dài ít nhất năm ký tự, bạn sẽ viết:
fruits = {"apple", "banana", "cherry", "fig", "kiwi"}
for fruit in fruits:
if len(fruit) >= 5:
print(fruit)
Mã này in tên trái cây có năm ký tự hoặc nhiều hơn.
banana
cherry
apple
Set Comprehensions
Tương tự như list comprehensions, set comprehensions cũng có sẵn. Sử dụng set comprehension cho phép bạn tạo một set mới một cách ngắn gọn dựa trên một điều kiện.
Ví dụ 3: Tạo Một Set Mới Với Điều Kiện
Ví dụ, để tạo một set mới chỉ chứa các phần tử có năm ký tự hoặc nhiều hơn, như trong ví dụ trước, bạn có thể viết:
fruits = {"apple", "banana", "cherry", "fig", "kiwi"}
long_fruits = {fruit for fruit in fruits if len(fruit) >= 5}
print(long_fruits)
Kết quả đầu ra sẽ trông như sau (thứ tự không được đảm bảo).
{'banana', 'cherry', 'apple'}
Tóm Tắt
Set là một cấu trúc dữ liệu không cho phép trùng lặp và không có thứ tự, mang lại đặc tính khác biệt so với list hoặc tuple. Chúng đặc biệt phù hợp để xử lý dữ liệu duy nhất và cho các hoạt động với các set khác để tìm giao hoặc hiệu. Ngoài ra, sử dụng set comprehensions cho phép xử lý dữ liệu ngắn gọn và hiệu quả.
8. Sử Dụng Module itertools
itertools là một bộ công cụ tiện lợi được bao gồm trong thư viện chuẩn của Python để hỗ trợ việc lặp lại. Nó cung cấp nhiều hàm để xử lý hiệu quả các cấu trúc dữ liệu có thể lặp, điều này đặc biệt hữu ích khi làm việc với lượng dữ liệu lớn. Trong chương này, chúng tôi sẽ giải thích các hàm chính của mô-đun itertools và cách sử dụng chúng.
Các hàm chính của mô-đun itertools
Mô-đun itertools cung cấp đa dạng các hàm để nâng cao việc lặp lại. Ở đây chúng tôi giới thiệu các hàm tiêu biểu và giải thích cách sử dụng chúng qua các ví dụ cụ thể.
1. hàm count
Hàm count là một iterator tạo ra các số tăng vô hạn từ một giá trị bắt đầu được chỉ định. Nó thường được dùng để tạo các số thứ tự khi không có giới hạn trên.
from itertools import count
for i in count(10):
if i > 15:
break
print(i)
Đoạn mã này bắt đầu từ 10 và xuất ra các số nguyên nhỏ hơn 16.
10
11
12
13
14
15
2. hàm cycle
Hàm cycle tạo ra một iterator lặp lại một dãy cho trước vô hạn. Nó hữu ích khi bạn muốn xuất ra một mẫu cụ thể liên tục.
from itertools import cycle
count = 0
for item in cycle(["A", "B", "C"]):
if count == 6:
break
print(item)
count += 1
Đoạn mã này lặp lại “A”, “B”, “C” và xuất chúng tổng cộng 6 lần.
A
B
C
A
B
C
3. hàm repeat
Hàm repeat tạo ra một iterator lặp lại một phần tử được chỉ định vô hạn. Bạn cũng có thể chỉ định số lần lặp bằng đối số thứ hai.
from itertools import repeat
for item in repeat("Python", 3):
print(item)
Đoạn mã này xuất “Python” ba lần.
Python
Python
Python
4. hàm accumulate
Hàm accumulate tạo ra một iterator tính tổng lũy kế của một dãy cho trước. Ví dụ, nó hữu ích để cộng các phần tử của danh sách một cách tuần tự. Bằng cách sử dụng hàm tùy chỉnh, bạn cũng có thể thực hiện các phép tính khác như tích hoặc giá trị lớn nhất.
from itertools import accumulate
numbers = [1, 2, 3, 4, 5]
result = list(accumulate(numbers))
print(result)
Đoạn mã này tính tổng lũy kế của một danh sách và xuất kết quả sau.
[1, 3, 6, 10, 15]
Tổng kết
Mô-đun itertools cung cấp một kho tàng các hàm để triển khai các vòng lặp phức tạp một cách hiệu quả. Nó đặc biệt hữu ích khi bạn cần lặp vô hạn hoặc các tổ hợp, hoán vị của dữ liệu, giúp mã ngắn gọn hơn và tăng tốc xử lý. Bằng cách xử lý vòng lặp linh hoạt hơn, bạn có thể viết mã Python xử lý các bộ dữ liệu lớn và các thao tác phức tạp.
9. Tổng kết
Python cung cấp nhiều cách để xử lý vòng lặp, mỗi cách có đặc điểm và mục đích sử dụng riêng. Trong suốt loạt bài này, chúng ta đã học các kỹ thuật đa dạng để làm cho việc lặp trong Python hiệu quả hơn. Trong chương này, chúng ta sẽ ôn lại các kỹ thuật đó để bạn có thể chọn lựa phương án phù hợp với mục tiêu của mình.
Các điểm chính và cách sử dụng của mỗi phương pháp
Dưới đây là bản tóm tắt ngắn gọn các điểm chính và cách sử dụng của mỗi phương pháp.
1. Vòng lặp for
Điểm: Cú pháp lặp cơ bản trong Python. Đơn giản và đa năng.
Cách sử dụng: Dùng khi xử lý các chuỗi như danh sách, tuple hoặc chuỗi ký tự.
2. Hàm enumerate
Điểm: Hàm cho phép lấy đồng thời cả chỉ mục và phần tử.
Cách sử dụng: Lặp qua dữ liệu khi thứ tự quan trọng hoặc khi cần chỉ mục.
3. Hàm zip
Điểm: Cho phép lặp đồng thời nhiều chuỗi.
Cách sử dụng: Tiện lợi khi xử lý các phần tử tương ứng của các danh sách hoặc tuple khác nhau.
4. List Comprehension
Điểm: Cách tạo danh sách đơn giản và hiệu quả. Có thể kèm điều kiện.
Cách sử dụng: Tạo và lọc danh sách dựa trên các điều kiện hoặc biểu thức.
5. Lặp qua Dictionary
Điểm: Có thể lấy khóa, giá trị, hoặc cặp khóa-giá trị.
Cách sử dụng: Dùng khi xử lý dữ liệu dạng từ điển và cần thao tác dựa trên khóa và giá trị.
6. Lặp Set
Điểm: Có thể xử lý dữ liệu với các phần tử duy nhất (không trùng lặp).
Cách dùng: Xử lý dữ liệu duy nhất và thực hiện các thao tác với các set khác.
7. Module itertools
Điểm: Cho phép lặp vô hạn, kết hợp nhiều chuỗi, và tạo hoán vị cũng như tổ hợp.
Cách dùng: Dùng cho việc lặp phức tạp hoặc khi xử lý hiệu quả một lượng lớn dữ liệu.
Hướng dẫn chọn phương pháp tối ưu
Trong việc lặp, việc chọn phương pháp tối ưu dựa trên mục tiêu và cấu trúc dữ liệu là rất quan trọng. Dưới đây là các hướng dẫn để chọn kỹ thuật lặp phù hợp cho từng mục đích.
- Lặp danh sách hoặc tuple đơn giản: Vòng lặp
forcơ bản là cách trực quan và đơn giản nhất. - Khi cần chỉ mục: Bằng cách sử dụng
enumerate, bạn có thể lặp đồng thời lấy cả chỉ mục và phần tử. - Khi xử lý nhiều chuỗi đồng thời: Sử dụng
zipcho phép bạn xử lý hiệu quả nhiều danh sách hoặc tuple song song. - Tạo danh sách có điều kiện: Dùng list comprehension để chọn phần tử có điều kiện và lưu kết quả tính toán trực tiếp vào danh sách.
- Khi cần các thao tác đặc biệt trên từ điển hoặc set: Bằng cách sử dụng các phương thức
items(),values(), hoặc set comprehension chuyên cho từ điển và set, bạn có thể dễ dàng xử lý khóa và giá trị hoặc dữ liệu duy nhất. - Khi cần lặp nâng cao hoặc tối ưu hoá: Sử dụng module
itertoolscho phép lặp vô hạn hiệu quả, kết hợp nhiều bộ dữ liệu, và tạo ra các hoán vị và tổ hợp đặc biệt.
Kết luận
Python cung cấp một bộ tính năng phong phú để thực hiện lặp một cách hiệu quả và ngắn gọn. Bằng cách sử dụng đa dạng các kỹ thuật—từ vòng lặp đơn giản đến lặp nâng cao trên nhiều chuỗi—bạn có thể cải thiện đáng kể tính đọc được và hiệu suất của mã. Áp dụng đúng các phương pháp này làm cho lập trình Python trở nên linh hoạt và mạnh mẽ hơn.
Trong tương lai, hãy hướng tới việc nắm vững từng tính năng khi cần và tiếp tục viết mã hiệu quả.



