6.1 Vòng lặp for
Trong Python, vòng lặp qua các phần tử của danh sách thường được thực hiện thông qua
vòng lặp for
. Đây là một trong những cách tiếp cận thường dùng nhất để lặp qua danh sách,
cho phép thực hiện đoạn mã cho mỗi phần tử trong danh sách.
Cơ bản về vòng lặp for
Vòng lặp for
trong Python lặp qua từng phần tử của danh sách, tạm thời
gán giá trị hiện tại của phần tử vào biến được chỉ định sau từ khóa
for
. Ví dụ:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
Lặp qua danh sách theo thứ tự ngược có thể thực hiện bằng cách dùng cắt lát:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits[::-1]:
print(fruit)
6.2 Vòng lặp for
với chỉ số
Ngoài việc lặp qua danh sách bằng for
cổ điển, bạn có thể lặp
qua danh sách bằng vòng lặp for
kết hợp với hàm range()
. Điều này
không chỉ cho phép bạn thao tác với chính các phần tử mà còn cho phép làm việc với vị trí của chúng, điều này
cần thiết khi thực hiện các phép biến đổi dữ liệu phức tạp hơn.
Cơ bản về lặp có chỉ số
Để lặp qua danh sách với quyền truy cập vào chỉ số của từng phần tử, bạn có thể sử dụng cách tiếp cận sau:
my_list = ['a', 'b', 'c', 'd']
for i in range(len(my_list)):
print(f'Index: {i}, Element: {my_list[i]}')
Lợi ích khi sử dụng chỉ số
Sử dụng chỉ số trong vòng lặp cho phép không chỉ truy cập vào mỗi phần tử, mà còn thay đổi các phần tử của danh sách ngay tại chỗ. Điều này đặc biệt hữu ích, khi bạn cần sửa đổi danh sách trong quá trình lặp.
Ví dụ:
my_list = ['a', 'b', 'c', 'd']
for i in range(len(my_list)):
my_list[i] = my_list[i] * 2
Ví dụ về các thao tác phức tạp
Với chỉ số, bạn dễ dàng thực hiện các thuật toán yêu cầu truy cập đồng thời vào nhiều phần tử trong danh sách, chẳng hạn như để so sánh phần tử hiện tại với phần tử trước hoặc sau đó:
Ví dụ:
my_list = [3, 5, 2, 9, 4]
for i in range(1, len(my_list)):
if my_list[i] > my_list[i - 1]:
print(f'{my_list[i]} is greater than {my_list[i - 1]}')
6.3 Sử dụng hàm enumerate()
Trong Python,
hàm enumerate()
cung cấp cách tiện lợi
để lặp qua các phần tử của danh sách với quyền truy cập đồng thời vào chỉ số của chúng.
Điều này đặc biệt hữu ích khi cần xử lý cả chỉ số và giá trị
của phần tử trong danh sách trong khi vòng lặp thực thi.
Cơ bản về hàm enumerate()
Hàm enumerate()
bọc danh sách trong một đối tượng đặc biệt và
trả về một iterator tạo ra các tuples (cặp giá trị), bao gồm
chỉ số và giá trị của phần tử:
my_list = ["apple", "banana", "cherry"]
for index, element in enumerate(my_list):
print(f'Index: {index}, Element: {element}')
Bây giờ bạn có không chỉ phần tử mà còn có cả chỉ số của nó.
Lợi ích của enumerate()
Sử dụng enumerate()
làm cho mã dễ đọc hơn và
tránh được việc phải quản lý thủ công chỉ số với
range(len(...))
. Điều này đơn giản hóa việc thao tác với các phần tử của danh sách,
như thay đổi, truy cập phần tử và thực hiện các kiểm tra điều kiện.
Ví dụ sử dụng
enumerate()
rất phù hợp cho các tác vụ yêu cầu
thay đổi đồng thời các phần tử của danh sách hoặc so sánh các phần tử với chỉ số của chúng:
my_list = ["apple", "banana", "cherry"]
for index, element in enumerate(my_list):
if index % 2 == 0:
print(f'Element {element} at even index {index}')
6.4 Vòng lặp while
Chúng ta đã thảo luận về for
, bây giờ hãy nói về vòng lặp while
. Vòng lặp này cũng có thể hữu ích khi làm việc với các phần tử của danh sách.
Nhắc lại, vòng lặp while
bắt đầu thực thi bằng cách kiểm tra
điều kiện. Nếu điều kiện là đúng, thân của vòng lặp được thực hiện, sau đó điều kiện
được kiểm tra lại. Quá trình được lặp lại cho đến khi điều kiện trở thành
sai.
Ví dụ về lặp qua danh sách
Giả sử bạn có một danh sách các số và bạn muốn lặp qua nó cho đến khi gặp một giá trị nhất định:
numbers = [1, 2, 3, 4, 5, -1, 6]
i = 0
while i < len(numbers) and numbers[i] != -1:
print(numbers[i])
i += 1
Không khác nhiều so với vòng lặp for
, đúng không? Nhưng có những trường hợp mà chúng ta không cần
sử dụng chỉ số để làm việc với các phần tử của danh sách. Chẳng hạn, nếu
danh sách chứa một số nhiệm vụ, cần thực hiện từng cái một từ danh sách, thực hiện và xóa khỏi danh sách.
Đoạn mã này có thể được viết sơ đồ hóa như vậy:
tasks = [1, 2, 3, 4, 5, -1, 6]
while len(tasks) > 0:
task = tasks.pop()
print(task)
GO TO FULL VERSION