Python range() Hàm: Float, List, For loop Ví dụ

⚡ Tóm tắt thông minh

Python Hàm range() là một hàm tích hợp tạo ra một dãy số nguyên bất biến từ giá trị bắt đầu đến giá trị kết thúc (nhưng không bao gồm giá trị kết thúc), sử dụng tham số step tùy chọn để kiểm soát bước tăng.

  • 🔘 Cú pháp: Hàm range(start, stop, step) chấp nhận tối đa ba đối số kiểu số nguyên, trong đó start mặc định là 0 và step mặc định là 1.
  • ☑️ Điểm dừng độc quyền: Chuỗi luôn dừng ở một giá trị trước chỉ số dừng, vì vậy range(5) trả về từ 0 đến 4.
  • Điều khiển từng bước: Bước tăng dương sẽ làm tăng giá trị, trong khi bước giảm âm sẽ đếm ngược lại để tạo ra phạm vi ngược.
  • 🧪 Giới hạn kiểu dữ liệu: Chỉ chấp nhận số nguyên, do đó các đối số kiểu số thực hoặc chuỗi sẽ gây ra lỗi TypeError.
  • 🛠️ Số thực NumPy: Hàm NumPy arange() mở rộng hành vi của hàm range() cho các chuỗi số thực.
  • 🤖 Quy trình làm việc của AI: Mã máy học dựa vào hàm range() để lặp lại các epoch huấn luyện, các mini-batch và lưới siêu tham số.

Python phạm vi() Hàm

Là gì Python Phạm vi?

Python range() là một hàm tích hợp có sẵn với Python từ Python (3.x), và nó đưa ra một chuỗi số dựa trên chỉ số bắt đầu và dừng được đưa ra. Trong trường hợp chỉ số bắt đầu không được đưa ra, chỉ số được coi là 0 và nó sẽ tăng giá trị lên 1 cho đến chỉ số dừng.

Ví dụ, range(5) sẽ xuất ra các giá trị 0, 1, 2, 3, 4. Python `range()` là một lệnh rất hữu ích và chủ yếu được sử dụng khi bạn cần lặp lại bằng cách sử dụng một phạm vi. vòng lặp for.

cú pháp

Cú pháp của hàm range() được hiển thị bên dưới:

range(start, stop, step)

Thông số Kỹ thuật

  • bắt đầu: (tùy chọn) Chỉ số bắt đầu là một số nguyên và nếu không được cung cấp thì giá trị mặc định là 0.
  • dừng lại: Chỉ số dừng quyết định giá trị mà tại đó hàm phạm vi phải dừng lại. Đây là một tham số bắt buộc đối với hàm phạm vi. Giá trị cuối cùng sẽ luôn nhỏ hơn giá trị dừng 1 đơn vị.
  • bươc: (Tùy chọn) Giá trị bước nhảy là số mà số tiếp theo trong phạm vi phải tăng lên; theo mặc định, giá trị này là 1.

Giá trị trả lại

Giá trị trả về là một dãy số từ chỉ số bắt đầu đến chỉ số dừng đã cho.

Python range() Chức năng và lịch sử

Python range() đã được giới thiệu từ Python phiên bản 3; trước đó, hàm là xrange().

Cả range() và xrange() đều được sử dụng để tạo ra một dãy số.

Sau đây là những điểm khác biệt giữa range() và xrange():

phạm vi() xrange ()
Range() đưa ra chuỗi số và trả về danh sách các số. Hàm xrange() cung cấp một đối tượng máy phát cần được lặp trong vòng lặp for để lấy các giá trị.
Range() trả về một danh sách. xrange() trả về một đối tượng tạo.
Phương thức range() sử dụng nhiều bộ nhớ hơn vì danh sách trả về phải được lưu trữ so với xrange(). Vì xrange() trả về một đối tượng generator, nên nó không cung cấp giá trị ngay lập tức và phải được sử dụng bên trong một vòng lặp for để lấy các giá trị.
Việc sử dụng bộ nhớ nhiều hơn dẫn đến tốc độ thực thi mã chậm hơn khi xử lý một tập dữ liệu lớn. Việc thực thi mã nhanh hơn khi sử dụng xrange().

Sử dụng phạm vi()

Ví dụ này cho thấy cách in các giá trị từ 0-9 bằng cách sử dụng range().

Giá trị được sử dụng trong phạm vi là 10, vì vậy đầu ra là 0 1 2 3 4 5 6 7 8 9.

Vì giá trị bắt đầu không được cung cấp, nên giá trị bắt đầu được coi là 0 và giá trị cuối cùng được cung cấp cho đến 9. Giá trị cuối cùng luôn nhỏ hơn giá trị được cung cấp 1, tức là dừng lại - 1.

for i in range(10):
    print(i, end =" ")

Đầu ra:

0 1 2 3 4 5 6 7 8 9

Sử dụng bắt đầu và dừng trong phạm vi()

Trong đoạn mã, giá trị bắt đầu là 3 và giá trị kết thúc là 10. Ở đây, chỉ số bắt đầu là 3, vì vậy dãy số sẽ bắt đầu từ 3 cho đến giá trị kết thúc. Giá trị cuối cùng trong dãy sẽ nhỏ hơn giá trị kết thúc 1 đơn vị, tức là 10 - 1 = 9.

for i in range(3, 10):
    print(i, end =" ")

Đầu ra:

3 4 5 6 7 8 9

Sử dụng bắt đầu, dừng và bước

Giá trị bắt đầu là 3, vì vậy dãy số sẽ bắt đầu từ 3. Giá trị kết thúc là 10, vì vậy dãy số sẽ dừng ở (10-1), tức là 9. Bước nhảy là 2, vì vậy mỗi giá trị trong dãy sẽ tăng thêm 2. Nếu không cung cấp giá trị bước nhảy, giá trị mặc định cho bước nhảy là 1.

for i in range(3, 10, 2):
    print(i, end =" ")

Đầu ra:

3 5 7 9

Cho đến nay, chúng ta đã thấy hàm range() trả về giá trị tăng dần cho giá trị dừng đã cho. Bây giờ, hãy thử một ví dụ để lấy giá trị giảm dần trong phạm vi đã cho.

Tăng dần các giá trị trong phạm vi bằng một bước tăng dương.

Tham số step trong hàm range() có thể được sử dụng để tăng hoặc giảm giá trị. Theo mặc định, nó là một giá trị dương, là 1. Vì vậy, nó sẽ luôn trả về các giá trị được tăng dần.

Giá trị bước phải dương nếu bạn muốn nhận các giá trị tăng dần làm đầu ra.

for i in range(1, 30, 5):
    print(i, end =" ")

Đầu ra:

1 6 11 16 21 26

Reverse Phạm vi: Giảm dần các giá trị bằng bước âm.

Tham số step với giá trị âm trong hàm range() có thể được sử dụng để lấy các giá trị giảm dần. Trong ví dụ bên dưới, giá trị step là âm, do đó đầu ra sẽ giảm đi từ giá trị phạm vi đã cho.

for i in range(15, 5, -1):
    print(i, end =" ")

Đầu ra:

15 14 13 12 11 10 9 8 7 6

Giá trị bắt đầu là 15, giá trị dừng là 5, và giá trị bước nhảy là một số âm, tức là -1. Với các giá trị đầu vào trên, hàm range() sẽ giảm giá trị từ 15 trở đi cho đến khi đạt đến giá trị dừng, nhưng điểm khác biệt ở đây là giá trị cuối cùng sẽ là dừng + 1.

Sử dụng số động trong Python phạm vi()

Bây giờ chúng ta hãy làm việc với phạm vi() bằng cách sử dụng các số có dấu phẩy động.

Ví dụ:

for i in range(10.5):
    print(i, end =" ")

Trong ví dụ trên, chúng ta đã sử dụng giá trị dừng là 10.5.

Đầu ra là:

Traceback (most recent call last):
  File "python_range.py", line 1, in <module>
    for i in range(10.5):
TypeError: 'float' object cannot be interpreted as an integer

Python Báo lỗi vì hàm range() không hỗ trợ số thực cho các tham số start, stop và step.

Sử dụng vòng lặp for với Python phạm vi()

Trong ví dụ này, chúng ta sẽ sử dụng một mảng các số và xem cách lặp qua mảng đó bên trong vòng lặp for bằng cách sử dụng hàm range().

Ví dụ:

arr_list = ['Mysql', 'Mongodb', 'PostgreSQL', 'Firebase']

for i in range(len(arr_list)):
    print(arr_list[i], end =" ")

Đầu ra:

MysqlMongodb PostgreSQL Firebase

Trong ví dụ trên, chúng ta đã sử dụng len(arr_list) làm giá trị dừng. Vòng lặp for sẽ lặp đến khi gặp giá trị dừng, tức là độ dài của mảng, sẽ là 4, vì chúng ta có bốn phần tử trong arr_list. Giá trị bắt đầu sẽ là 0 và bước nhảy sẽ là 1, vì vậy các giá trị sẽ bắt đầu từ 0 và dừng lại ở 3, tức là độ dài của mảng - 1, có nghĩa là 4 - 1 = 3.

Sử dụng Python range() dưới dạng danh sách

Trong ví dụ này sẽ xem cách sử dụng đầu ra từ phạm vi làm danh sách.

Ví dụ:

print(list(range(10)))

Đầu ra:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Bạn có thể thấy đầu ra là một định dạng danh sách. Không cần thiết phải lặp phạm vi() và sử dụng phương thức list() chúng ta có thể chuyển đổi trực tiếp đầu ra từ định dạng phạm vi sang định dạng danh sách.

Sử dụng các ký tự trong phạm vi python()

Cho đến nay, chúng ta đã sử dụng số nguyên trong phạm vi python(). Chúng tôi cũng thấy rằng các số có dấu phẩy động không được hỗ trợ trong phạm vi python. Chúng ta hãy thử xem kết quả sẽ xảy ra như thế nào khi chúng ta sử dụng các ký tự.

Ví dụ:

for c in range ('z'):
        print(c, end =" ")

Đầu ra:

Traceback (most recent call last):
  File "python_range.py", line 1, in <module>
    for c in range ('z'):
TypeError: 'str' object cannot be interpreted as an integer

Nó đưa ra lỗi cho biết một chuỗi không thể được hiểu là số nguyên.

Để có được danh sách các bảng chữ cái, bạn có thể tùy chỉnh mã và nhận kết quả mong muốn như hiển thị bên dưới:

Ví dụ:

def get_alphabets(startletter, stopletter, step):
    for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
        yield chr(c)

print(list(get_alphabets("a", "h", 1)))

Đầu ra:

['a', 'b', 'c', 'd', 'e', 'f', 'g']

Cách truy cập các phần tử phạm vi

Bạn có thể sử dụng vòng lặp for để lấy các giá trị từ phạm vi hoặc sử dụng chỉ mục để truy cập các phần tử từ phạm vi().

Sử dụng vòng lặp for

Ví dụ:

for i in range(6):
    print(i)

Đầu ra:

0
1
2
3
4
5

Sử dụng chỉ mục

Chỉ mục được sử dụng với phạm vi để lấy giá trị có sẵn tại vị trí đó. Nếu giá trị phạm vi là 5, để lấy giá trị bắt đầu, bạn có thể sử dụng range(5)[0] và giá trị tiếp theo range(5)[1], v.v.

Ví dụ:

startvalue = range(5)[0] 
print("The first element in range is = ", startvalue) 

secondvalue = range(5)[1] 
print("The second element in range is = ", secondvalue) 

lastvalue = range(5)[-1]
print("The first element in range is = ", lastvalue)

Đầu ra:

The first element in range is =  0
The second element in range is =  1
The first element in range is =  4

Sử dụng danh sách()

Phương thức này sẽ in tất cả các phần tử từ phạm vi(). Sử dụng list() nó sẽ trả về các phần tử từ range() ở định dạng danh sách.

Ví dụ:

print(list(range(10)))

Đầu ra:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Nó cung cấp đầu ra danh sách cho phạm vi nhất định.

Ví dụ: Lấy số chẵn sử dụng range()

Sử dụng hàm range() sẽ lấy danh sách các số chẵn trong phạm vi được cung cấp làm đầu vào. Các tham số cho hàm range() là: start là 2, stop là 20 và step là 2, do đó các giá trị sẽ được tăng dần lên 2 và sẽ cho ra các số chẵn cho đến stop-2.

Ví dụ:

for i in range(2, 20, 2):
    print(i, end =" ")

Đầu ra:

2 4 6 8 10 12 14 16 18

Hợp nhất các đầu ra hai phạm vi ()

Trong ví dụ này, chúng ta sẽ nối hai hàm range() lại với nhau bằng cách sử dụng hàm chain() của mô-đun itertools.

Ví dụ:

from itertools import chain

print("Merging two range into one")
frange =chain(range(10), range(10, 20, 1))
for i in frange:
    print(i, end=" ")

Đầu ra:

Merging two range into one
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Sử dụng phạm vi() Với NumPy

Mô-đun NumPy có một hàm `arange()` hoạt động và cho ra kết quả tương tự như `range()`. Hàm `arange()` nhận vào các tham số giống như `range()`.

Cú pháp:

arange(start, stop, step)

Để làm việc với NumPy, hãy làm theo các bước dưới đây.

Bước 1: Nhập mô-đun NumPy

import numpy

Trong trường hợp khi thực thi, xuất hiện lỗi báo không tìm thấy mô-đun numpy, bạn cần cài đặt mô-đun như hướng dẫn ở bước 2.

Bước 2Cài đặt NumPy

pip install numpy

Bước 3: Ví dụ hoạt động của arange() sử dụng NumPy

import numpy as np

for  i in np.arange(10):
   print(i, end =" ")  

Đầu ra:

0 1 2 3 4 5 6 7 8 9

Số dấu phẩy động sử dụng NumPy arange()

Không thể lấy được chuỗi số thực bằng cách sử dụng hàm range(), nhưng có thể thực hiện được bằng cách sử dụng hàm arange() của NumPy.

Ví dụ:

Khoảng giá trị chúng ta muốn là từ 0.5 đến 1.5. Giá trị sẽ được tăng thêm 0.2.

import numpy as np

for  i in np.arange(0.5, 1.5, 0.2):
   print(i, end =" ")  

Đầu ra:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

Kết quả nhận được hơi kỳ lạ; một số số thực được hiển thị với 16 chữ số thập phân. Điều này xảy ra do sự phức tạp của việc lưu trữ các số thực thập phân ở định dạng nhị phân. Bạn cũng có thể làm tròn các giá trị nếu cần và giới hạn chúng ở số chữ số thập phân cần thiết.

Câu Hỏi Thường Gặp

In Python 3, range() trả về một đối tượng phạm vi lười biếng, bất biến, chứ không phải một danh sách. Nó tạo ra các số theo yêu cầu. Hãy bọc nó trong list(range(n)) khi cần một danh sách thực sự. Python Số 2 trả về một danh sách đầy đủ.

Giá trị dừng là độc quyền để range(len(items)) ánh xạ một cách rõ ràng tới các chỉ số dựa trên 0. Để bao gồm điểm cuối, hãy cộng thêm một vào giá trị dừng, ví dụ: range(1, 11) để đếm từ 1 đến 10.

Không. Gọi hàm range(0, 10, 0) sẽ gây ra lỗi ValueError: tham số thứ 3 của hàm range() không được bằng 0, vì bước nhảy bằng 0 sẽ không bao giờ đạt đến giá trị dừng và sẽ lặp vô hạn. Thay vào đó, hãy sử dụng bước nhảy dương hoặc âm.

Hàm `range()` từ chối các số thực, nhưng biểu thức tạo danh sách có thể điều chỉnh tỷ lệ các số nguyên: `[x * 0.5 for x in range(0, 6)]` tạo ra các giá trị từ 0.0 đến 2.5. Điều này giúp tránh việc nhập thư viện NumPy trong khi vẫn thực hiện được bước này.ping thông qua các giá trị thập phân.

Đúng vậy. Một đối tượng phạm vi chỉ lưu trữ các giá trị bắt đầu, kết thúc và bước nhảy của nó, vì vậy phạm vi(1000000) sử dụng cùng một lượng bộ nhớ nhỏ và không đổi như phạm vi(10). Các giá trị được tính toán từng cái một trong quá trình lặp.

Sử dụng toán tử in: 5 in range(0, 10) trả về True. Đối với các đối tượng range, Python Nó thực hiện phép kiểm tra tư cách thành viên này bằng các phép toán nhanh trong thời gian không đổi thay vì quét từng phần tử, do đó nó vẫn hiệu quả trên các phạm vi lớn.

Mã máy học sử dụng hàm `range()` để lặp qua các epoch huấn luyện, lặp lại các mini-batch và xây dựng lưới siêu tham số. Các hàm `arange()` và `linspace()` của NumPy mở rộng điều này cho các phạm vi số thực để lập lịch trình tốc độ học và quét ngưỡng thường thấy trong các thí nghiệm AI.

Đúng vậy. Các trợ lý lập trình AI như GitHub Copilot tự động hoàn thành các vòng lặp dựa trên range() từ chú thích hoặc tên hàm, và các công cụ dựa trên tác nhân có thể tái cấu trúc các vòng lặp chỉ mục thành các mẫu enumerate() hoặc comprehension gọn gàng hơn, mặc dù các giới hạn được tạo ra vẫn cần được xem xét nhanh.

Tóm tắt bài viết này với: