Phát triển

Bài 6: Vòng lặp for trong Python

Trang Vũ 27-02-2024
Bài 6: Vòng lặp for trong Python

Trong bài viết trước, chúng ta đã cùng nhau tìm hiểu về vòng lặp và gì và cách thực hiện nó với từ khóa while. Đó là cách để thực hiện một vòng lặp vô hạn, tuy nhiên, trong khái niệm vòng lặp tồn tại hai thể thực thi là vòng lặp vô hạn và vòng lặp hữu hạn. Vì thế trong bài viết tuần này, chúng ta sẽ cùng nhau tìm hiểu về vòng lặp hữu hạn với từ khóa for nhé.

Đặt lại vấn đề chúng ta đã cùng nhau tìm hiểu ở số trước:

  • Thực hiện lặp lại một khối lệnh được gọi là sự lặp lại
  • Có hai kiểu lặp
    • Lặp hữu hạn: số lần lặp được định nghĩa chính xác từ trước
    • Lặp vô hạn: không giới hạn số lần lặp
  • Trong Python, lặp vô hạn được thực hiện bởi vòng lặp while

Trong bài viết này, chúng ta sẽ cùng nhau giải quyết các vấn đề sau:

  • So sánh các điểm khác biệt giữa vòng lặp hữu hạn và vô hạn
  • Học về iterables và iterators
  • Cuối cùng, chúng ta sẽ gom toàn bộ các kiến thức trên và học về vòng lặp for trong Python

>>> Xem thêm các bài viết trong chuỗi bài hướng dẫn lập trình Python tại đây:

1. Vòng lặp for trong Python

Vòng lặp for trong Python là một vòng lặp hữu hạn, mỗi vòng lặp được giới hạn số lần thực thi các vòng và sử dụng iterator cho việc thực thi.

1.1. Một vòng lặp for cơ bản

Cú pháp cơ bản của vòng lặp for như sau:

for <var> in <iterable>:
    <statement(s)>

Trong đó:

<iterable> là một tập hợp các đối tượng

<statement(s)> được định nghĩa trong khối lệnh bằng một dấu thụt đầu dòng. Vòng lặp sẽ sử dụng biến <var> để lấy ra từng phần tử tiếp theo trong <iterable> mỗi khi một lần lặp được thực hiện trong cả vòng lặp.

Dưới đây là một ví dụ:

>>> a = ['foo', 'bar', 'baz']
>>> for i in a:
...     print(i)
...
foo
bar
baz

Trong ví dụ này, <iterable> là một list các phần tử a, <var> là biến i. Mỗi lần thực hiện vòng lặp, i sẽ nhận một giá trị kế tiếp trong list a và sẽ được phương thức print() in nó ra màn hình ‘foo’, ‘bar’, ‘baz’.

1.2. Iterables

Trong Python, iterable có nghĩa là một đối tượng được sử dụng trong một vòng lặp. Nếu một đối tượng là iterable, nó có thể được truyền vào trong phương thức có sẵn của Python iter(), phương thức này sẽ trả về một thứ được gọi là iterator.

Từng list object dưới đây là một ví dụ của việc sử dụng iterable và trả về iterator:

>>> iter('foobar') 
<str_iterator object at 0x1002b31c0>
>>> iter(['foo', 'bar', 'baz'])
<list_iterator object at 0x1002b3b50>
>>> iter(('foo', 'bar', 'baz')) 
<tuple_iterator object at 0x1002b3190>
>>> iter({'foo', 'bar', 'baz'})  
<set_iterator object at 0x1006c7d80>
>>> 
>>> iter({'foo': 1, 'bar': 2, 'baz': 3})
<dict_keyiterator object at 0x10028e6b0>

Tất nhiên là một số loại đối tượng khác sẽ không thể là iterable được:

>>> iter(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> iter(len)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'builtin_function_or_method' object is not iterable

Có những kiểu dữ liệu có dạng một tập hợp sẽ được mặc định coi là iterable, chúng là: string, list, tuple, dict, set, frozenset.

1.3. Iterators

Vậy là chúng ta đã biết cách làm thế nào để một đối tượng có tính iterable và sử dụng phương thức iter() để lấy về một iterator từ nó. Một khi chúng ta đã có được một iterator, chúng ta có thể sử dụng đối tượng này để duyệt qua tập hợp mà ta có.

Một iterator là một đối tượng cung cấp cho ta khả năng truy cập vào các giá trị từ đối tượng iterable tương ứng. Từ đây, chúng ta có thể sử dụng function được cấp sẵn bởi Python là next() để đọc giá trị liền kề sau đối tượng hiện tại từ iterator.

Dưới đây là một ví dụ về cách sử dụng iterator:

arr = ['a', 'b', 'c']
>>> iterator = iter(arr)
>>> iterator
<list_iterator object at 0x104652e30>
>>> next(iterator)
'a'
>>> next(iterator)
'b'
>>> next(iterator)
'c'

>>> Xem thêm bài viết:

- Sử dụng map reduce trong MongoDB

2. Cách một vòng lặp for thực thi 

2.1. Một vòng lặp cơ bản được thực hiện bởi Python như thế nào?

Tới đây thì chúng ta đã cùng nhau tìm hiểu hết các concept về vòng lặp for trong Python. Trước khi tiếp tục, chúng ta sẽ cùng nhau nhìn lại các thuật ngữ liên quan:

Thuật ngữÝ nghĩa
IterationQuá trình lặp qua nhiều đối tượng trong một tập hợp
IterableMột đối tượng mà có thể được sử dụng để lặp qua
IteratorMột đối tượng cung cấp các item tiếp theo hoặc nhiều giá trị từ iterable tương ứng với nó
iter()Phương thức được xây dựng sẵn dùng để tạo một iterator từ một iterable

Từ ví dụ về vòng lặp này, ta có thể rút ra được cách mà một vòng lặp hoạt động:

>>> arr = ['a', 'b', 'c']
>>> for i in arr:
...     print(i)
... 
a
b
c

Vòng lặp này có thể được mô tả lại theo các concept chúng ta đã tìm hiểu ở trên. Tại ví dụ ở trên, Python đã thực hiện các công việc sau:

  • Gọi phương thức iter() để tạo một đối tượng iterator từ mảng arr
  • Gọi phương thức next() một cách lặp lại để lấy lần lượt từng đối tượng trong dãy
  • Dừng vòng lặp khi phương thức next() văng ra ngoại lệ StopIteration

phương thức next() trả về kết quả, với mỗi vòng lặp biến i sẽ được gán bằng giá trị hiện tại đang được duyệt.

2.2. Lặp qua một từ điển

>>> d = {'foo': 1, 'bar': 2, 'baz': 3}
>>> for k in d:
...     print(k)
...
foo
bar
baz

Khi vòng lặp đi qua dictionary, biến lặp trong đó được gán cho giá trị bằng khóa của từ điển.

Để lấy được giá trị của dictionary trong vòng lặp, chúng ta có thể lấy ra một tham chiếu của từ điển bằng cách sử dụng khóa như thường lệ:

>>> for k in d:
...     print(d[k])
...
1
2
3

Hoặc chúng ta có thể duyệt qua tập hợp các giá trị của từ điển bằng cách sử dụng .values()

>>> for v in d.values():
...     print(v)
...
1
2
3

2.3. Sử dụng phương thức range

Một trong các cách sử dụng vòng for thông dụng nhất bạn từng gặp có lẽ là việc sử dụng số để giới hạn vòng lặp for, cú pháp để sử dụng nó có thể như dưới đây:

    for(int index = -1; ++index < 10;)
    {
        cout << index;
    }

Tuy nhiên, cú pháp này không được triển khai với Python. Trong Python, để thực hiện một vòng lặp tương tự như vậy, chúng ta sẽ sử dụng phương thức range().

>>> x = range(5)
>>> x
range(0, 5)
>>> type(x)
<class 'range'>

3. Điều khiển hành vi của một vòng lặp

Cũng là một loại vòng lặp trong Python nên for cũng sẽ có các từ khóa để điều khiển hành vi của vòng lặp là break và continue. Cách sử dụng của chúng cũng giống với việc sử dụng trong vòng lặp while.

Dưới đây là một số ví dụ về cách sử dụng các từ khóa này. Break có thể được sử dụng để dừng vòng lặp:

>>> for i in ['foo', 'bar', 'baz', 'qux']:
...     if 'b' in i:
...         break
...     print(i)
...
foo

Sử dụng continue để bỏ qua một vòng lặp nếu điều kiện đúng:

>>> for i in ['foo', 'bar', 'baz', 'qux']:
...     if 'b' in i:
...         continue
...     print(i)
...
foo
qux

Kết

For loop là một cách để thực hiện vòng lặp trong Python, trên đây là những chia sẻ của Stringee về kiến thức này. Mong rằng các bạn có thể áp dụng được nó vào các chương trình của mình.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: