Vòng lặp For trong Python - Phần 2

0

Kiểu dữ liệu range (dãy số)

Bạn gặp kiểu dữ liệu này suốt các phần liên quan đến comprehension hoặc là liên quan đến iterator object.
Đây là một kiểu dữ liệu rất đặc biệt vì ta có thể lấy nhiều giá trị từ nó nhưng bản chất thì nó không lưu giữ những giá trị mà chúng ta lấy. Trước khi đến với điều thú vị này, chúng ta cùng ngó tổng quát về kiểu dữ liệu này.
Chúng ta có hai cách khởi tạo.

Cách khởi tạo thứ nhất

Cú pháp:  

range(stop)


Với cách này, ta sẽ tạo một dãy số bắt đầu bằng số 0 và kết thúc là stop – 1. Dãy số này là một cấp số cộng với công sai là 1.

Cách khởi tạo thứ hai


Cú pháp:

range(startstop[step])
Với cú pháp này, ta sẽ tạo một dãy số bắt đầu bằng start và kết thúc là stop – 1. Dãy số này là một cấp số cộng với công sai là 1.
Trong trường hợp step (buộc phải khác 0) được đưa vào thì công sai sẽ là step.
Và đây là điều thú vị của hàm range. Hãy tạo một List chứa một dãy số cộng từ 0 tới một số kha khá lớn. Đương nhiên là cũng sẽ có một Range có một dãy số tương tự.
Tiếp đến, hãy dùng toán tử in

Sử dụng range để duyệt một List, Tuple, Chuỗi

Chúng ta sử dụng một dãy số để dùng indexing lấy các giá trị trong một List, Tuple hoặc Chuỗi.
Chúng ta có hàm range sinh ra một dãy số.
Kết hợp chúng lại, ta có thể duyệt một List, Tuple hoặc Chuỗi:

Sự khác nhau giữa sequence scan và indexing scan

Trong bài trước, bạn thấy rằng ta không cần dùng tới hàm range vẫn có thể duyệt hết các phần tử của một List. Vậy điều gì khiến chúng ta đôi lúc phải dùng tới hàm range để xử lí một List?
Đó là khi ta cần update (cập nhật) List. Hãy xem hai ví dụ sau đây:
Đầu tiên là sequence scan
Biến variable là một biến riêng lẻ, nên không thể cập nhật được List ban đầu.
Còn đối với indexing scan

Comprehension

Comprehension là một công cụ rất hiệu quả của Python để xử lí rất nhiều việc mà chỉ cần một dòng.
Bên cạnh đó. Người ta còn so sánh những comprehension và những đoạn code với chức năng tương tự thì comprehension có tốc độ nhanh hơn.
Ta có thể tổng quát đơn giản cú pháp của một comprehension như sau
Cú pháp:
[ output-expression for-statement optional-predicate ]

vd: khi không sử dụng comprehension


Khi sử dụng comprehension

Giới thiệu hàm enumerate

vd
Nhưng như vậy thì không rõ ràng cho lắm vì danh sách này không hề có số thứ tự. Bạn nghĩ đến việc sử dụng hàm range.
Đó cũng là một cách, nhưng Python có hỗ trợ cho bạn một hàm hay hơn đó chính là enumerate. Hàm có cú pháp như sau:

Cú pháp:

enumerate(iterable[, start])
Nếu start không được gửi vào thì mặc định là 0
Hàm này là một generator nhờ câu lệnh yield trong hàm. Nó sẽ tạo ra mỗi giá trị là một cặp gồm số thứ tự và giá trị có cấu trúc như sau
(start + 0, seq[0]), (start + 1, seq[1]), (start + 2, seq[2]), ...
Ví dụ:
Và khi đó, ta có thể sử dụng vòng for như sau

Kết luận

Qua bài viết này, đã nắm được Khái quát Vòng lặp For trong Python - Phần 2
Nguồn:www.howkteam.vn
Tags

Post a Comment

0Comments
Post a Comment (0)