Vòng lặp for trong Python có hoạt động trên phạm vi không?

Vòng lặp for rất thuận tiện để xử lý một chuỗi các giá trị, nhưng có một số vấn đề rất phổ biến mà vòng lặp for không thể tự xử lý. Thứ nhất, việc thay đổi giá trị của biến vòng lặp for [var] không làm thay đổi giá trị của phần tử tương ứng trong dãy. Ví dụ: giả sử chúng ta đã cố gắng thay đổi giá trị của từng phần tử trong một mảng thành 0 bằng cách sử dụng biến vòng lặp for ở phía bên trái của câu lệnh gán

>>> x = [1,2,3,4,5]
>>> for i in x:
..     i = 0
...
>>> x
[1, 2, 3, 4, 5]
Giá trị của các phần tử trong x không bị thay đổi, vì biến vòng lặp for chỉ đại diện cho một bản sao giá trị của phần tử tương ứng trong dãy chứ không phải chính phần tử thực tế. Lưu ý rằng nếu các phần tử của chuỗi được lặp lại là các đối tượng có thể thay đổi, thì các phần tử được lưu trữ trong các đối tượng đó có thể được thay đổi bằng cách tham chiếu đến phần tử thích hợp của biến vòng lặp. Xét mảng sau, có các phần tử là một mảng khác. Chúng ta có thể thay thế phần tử đầu tiên của mỗi phần tử mảng bằng 0 bằng cách sử dụng vòng lặp for.
>>> dblarray = [[7,12,9],[13,8,3],[19,2,14]]
>>> for d in dblarray:
..     d[0] = 0
...
>>> dblarray
[[0, 12, 9], [0, 8, 3], [0, 2, 14]]

Một ví dụ khác là trường hợp tạo một dãy mới bằng cách xử lý một hoặc nhiều dãy khác. Giả sử chúng ta có một mảng giá và một mảng có cùng độ dài chứa thuế và chúng ta muốn tạo mảng thứ ba có tổng giá và thuế cho từng mặt hàng được biểu thị trong hai mảng. Rõ ràng, vòng lặp for như đã trình bày cho đến nay không có cách nào xử lý vấn đề này. Nếu quen thuộc với các ngôn ngữ lập trình khác, bạn sẽ nhận thấy rằng hai tác vụ này khá đơn giản trong hầu hết các ngôn ngữ khác, với chi phí là cú pháp phức tạp hoặc cấu trúc vòng lặp bổ sung

Trong python, các vấn đề như thế này được giải quyết bằng cách lặp qua một chuỗi các số nguyên được tạo bởi hàm phạm vi, sau đó tham chiếu đến các phần tử riêng lẻ của chuỗi bên trong phần thân của vòng lặp for để thực hiện các tác vụ mong muốn. Hàm phạm vi chấp nhận một, hai hoặc ba đối số. Với một đối số số nguyên duy nhất, phạm vi trả về một chuỗi các số nguyên nhỏ hơn từ 0 đến một so với đối số được cung cấp. Với hai đối số, đối số đầu tiên được sử dụng làm giá trị bắt đầu thay vì 0 và với ba đối số, đối số thứ ba được sử dụng làm giá trị gia tăng thay vì mặc định ngầm định là 1. Lưu ý rằng phạm vi không bao giờ bao gồm giới hạn trên của nó trong chuỗi được trả về; . 4. 3], nó được thiết kế để hoạt động cùng với việc đăng ký các phần tử trong một chuỗi, bắt đầu từ 0 và tiếp tục đến một phần tử nhỏ hơn độ dài của chuỗi

Vì vậy, để loại bỏ tất cả các phần tử trong một mảng, chúng ta có thể sử dụng phạm vi như sau

>>> x = [1,2,3,4,5]
>>> for i in range[len[x]]:
..     x[i] = 0
...
>>> x
[0, 0, 0, 0, 0]
Vì hàm len trả về số phần tử trong một chuỗi và vì các chỉ số dưới bắt đầu bằng 0 nên phạm vi và len phối hợp rất tốt với nhau. Đây là một giải pháp cho vấn đề cộng một mảng giá và thuế để tạo ra một mảng tổng.
>>> prices = [12.00,14.00,17.00]
>>> taxes = [0.48,0.56,0.68]
>>> total = [] 
>>> for i in range[len[prices]]:
..     total.append[prices[i] + taxes[i]] 
...
>>> total
[12.48, 14.56, 17.68]
Ngoài ra, chúng ta có thể coi các phần tử của tổng có cùng chỉ số dưới là các phần tử tương ứng của giá và thuế, nhưng trước tiên chúng ta phải khởi tạo tổng để có số lượng phần tử chính xác.
>>> total = len[prices] * [0]
>>> for i in range[len[prices]]:
..     total[i] = prices[i] + taxes[i]
...
>>> total
[12.48, 14.56, 17.68]
Dấu ngoặc xung quanh số 0 là bắt buộc để python tạo danh sách có số phần tử phù hợp, thay vì danh sách vô hướng [Phần 4. 3. 2]

Hàm phạm vi thực sự tạo ra một danh sách trong bộ nhớ chứa tất cả các phần tử được chỉ định thông qua các đối số của nó. Đối với các chuỗi liên quan đến số lượng rất lớn, điều này có thể tiêu tốn một lượng lớn bộ nhớ. Trong những trường hợp như thế này, python cung cấp chức năng xrange. Mặc dù hàm này trả về một đối tượng hoạt động giống như danh sách được trả về theo phạm vi, nhưng các phần tử thích hợp được tính toán khi cần, thay vì thực sự được lưu trữ trong bộ nhớ. Vì điều này làm cho xrange chậm hơn đáng kể so với range, bạn chỉ nên sử dụng xrange khi làm việc với nhiều giá trị

Phạm vi Python[] 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 dãy số dựa trên chỉ số bắt đầu và dừng đã cho. Trong trường hợp chỉ mục bắt đầu không được cung cấp, chỉ mục được coi là 0 và nó sẽ tăng giá trị thêm 1 cho đến khi chỉ mục dừng

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

Trong hướng dẫn này, bạn sẽ học

  • Phạm vi Python là gì?
  • cú pháp
  • Phạm vi Python[] Hàm và lịch sử
  • Sử dụng phạm vi[]
  • Sử dụng bắt đầu và dừng trong phạm vi[]
  • Sử dụng bắt đầu, dừng và bước
  • Tăng các giá trị trong phạm vi bằng cách sử dụng một bước tích cực
  • Phạm vi đảo ngược. Giảm các giá trị bằng cách sử dụng bước âm
  • Sử dụng số thực trong phạm vi Python[]
  • Sử dụng vòng lặp for với Python range[]
  • Sử dụng phạm vi Python[] làm danh sách
  • Sử dụng các ký tự trong phạm vi python[]
  • Cách truy cập các phần tử phạm vi
  • Thí dụ. Nhận số chẵn bằng cách sử dụng phạm vi []
  • Hợp nhất các đầu ra hai phạm vi []
  • Sử dụng phạm vi [] Với NumPy

cú pháp

range[start, stop, step]

Thông số

  • bắt đầu. [tùy chọn] Chỉ mục bắt đầu là một số nguyên và nếu không được cung cấp, giá trị mặc định là 0
  • dừng lại. Chỉ số dừng quyết định giá trị tại đó hàm phạm vi phải dừng. Nó là một đầu vào bắt buộc cho chức năng phạm vi. Giá trị cuối cùng sẽ luôn nhỏ hơn 1 giá trị dừng
  • bươc. [không bắt buộc]. Giá trị bước là số mà số tiếp theo trong phạm vi phải được tăng lên, theo mặc định, nó là 1

Giá trị trả về

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

Phạm vi Python[] Hàm và lịch sử

Phạm vi Python[] đã được giới thiệu từ phiên bản python 3, trước đó xrange[] là chức năng

Cả phạm vi và xrange[] đều được sử dụng để tạo ra một chuỗi số

Sau đây là sự khác biệt giữa phạm vi và xrange[]

phạm vi [] xrange [] phạm vi [] đư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 trình tạo cần được lặp trong vòng lặp for để nhận các giá trị. Phạm vi [] trả về một danh sách. xrange[] trả về một đối tượng trình 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 trình tạo, nó không đưa ra các giá trị ngay lập tức và phải được sử dụng bên trong vòng lặp for để lấy các giá trị. Việc sử dụng bộ nhớ nhiều hơn do đó việc thực thi mã bị chậm khi làm việc trên một tập hợp dữ liệu khổng lồ. 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 phạm vi []

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ì không bắt đầu nên bắt đầu được coi là 0 và giá trị cuối cùng được đưa ra cho đến 9. Giá trị cuối cùng luôn nhỏ hơn 1 giá trị đã cho i. e. điểm dừng-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 mã, giá trị bắt đầu là 3 và giá trị dừng là 10. Ở đây chỉ số bắt đầu là 3 nên dãy số sẽ bắt đầu từ 3 cho đến giá trị dừng. Giá trị cuối cùng trong chuỗi sẽ nhỏ hơn 1 so với giá trị dừng 10-1 = 9

________số 8

đầ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 nên dãy số sẽ bắt đầu từ 3. Giá trị dừng là 10 nên dãy số sẽ dừng tại [10-1]i. e9. Bước là 2, vì vậy mỗi giá trị trong chuỗi sẽ được tăng thêm 2. Nếu giá trị bước không được cung cấp, giá trị cho bước mặc định là 1

>>> dblarray = [[7,12,9],[13,8,3],[19,2,14]]
>>> for d in dblarray:
..     d[0] = 0
...
>>> dblarray
[[0, 12, 9], [0, 8, 3], [0, 2, 14]]
0

đầu ra

>>> dblarray = [[7,12,9],[13,8,3],[19,2,14]]
>>> for d in dblarray:
..     d[0] = 0
...
>>> dblarray
[[0, 12, 9], [0, 8, 3], [0, 2, 14]]
1

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

Tăng các giá trị trong phạm vi bằng cách sử dụng một bước tích cực

Bước tham số trong phạm vi [] có thể được sử dụng để tăng/giảm các giá trị. Theo mặc định, nó là giá trị dương 1. Vì vậy, nó sẽ luôn cung cấp các giá trị gia tăng

Giá trị bước phải dương trong trường hợp bạn muốn giá trị gia tăng làm đầu ra

>>> dblarray = [[7,12,9],[13,8,3],[19,2,14]]
>>> for d in dblarray:
..     d[0] = 0
...
>>> dblarray
[[0, 12, 9], [0, 8, 3], [0, 2, 14]]
2

đầu ra

>>> dblarray = [[7,12,9],[13,8,3],[19,2,14]]
>>> for d in dblarray:
..     d[0] = 0
...
>>> dblarray
[[0, 12, 9], [0, 8, 3], [0, 2, 14]]
3

Phạm vi đảo ngược. Giảm các giá trị bằng cách sử dụng bước âm

Bước tham số có giá trị âm trong phạm vi [] có thể được sử dụng để nhận các giá trị giảm dần. Trong ví dụ bên dưới, giá trị bước là âm nên đầu ra sẽ giảm dần so với giá trị phạm vi đã cho

>>> dblarray = [[7,12,9],[13,8,3],[19,2,14]]
>>> for d in dblarray:
..     d[0] = 0
...
>>> dblarray
[[0, 12, 9], [0, 8, 3], [0, 2, 14]]
4

đầu ra

for i in range[10]:
    print[i, end =" "]
0

Giá trị bắt đầu là 15, giá trị dừng là 5 và giá trị bước là số âm i. e -1. Với các đầ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ố thực trong phạm vi Python[]

Bây giờ chúng ta hãy làm việc trên phạm vi [] bằng cách sử dụng các số dấu phẩy động

Thí dụ

for i in range[10]:
    print[i, end =" "]
1

Trong ví dụ trên, chúng tôi đã sử dụng giá trị dừng là 10. 5

đầu ra là

for i in range[10]:
    print[i, end =" "]
2

Python đưa ra lỗi vì hàm phạm vi [] không hỗ trợ các số dấu phẩy động cho bắt đầu, dừng và bước

Sử dụng vòng lặp for với Python range[]

Trong ví dụ này, chúng ta sẽ sử dụng một mảng số và, chúng ta hãy xem cách sử dụng phép lặp mảng bên trong vòng lặp for bằng cách sử dụng phạm vi []

Thí dụ

for i in range[10]:
    print[i, end =" "]
3

đầu ra

for i in range[10]:
    print[i, end =" "]
4

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

Sử dụng phạm vi Python[] làm danh sách

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

Thí dụ

for i in range[10]:
    print[i, end =" "]
5

đầu ra

for i in range[10]:
    print[i, end =" "]
6

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 tôi có thể trực tiếp chuyển đổi đầ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 tôi đã sử dụng số nguyên trong phạm vi python[]. Chúng tôi cũng đã thấy rằng các số dấu phẩy động không được hỗ trợ trong phạm vi python. Hãy để chúng tôi thử và xem đầu ra là điều gì sẽ xảy ra khi chúng tôi sử dụng các ký tự

Thí dụ

for i in range[10]:
    print[i, end =" "]
7

đầu ra

for i in range[10]:
    print[i, end =" "]
8

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

Để lấy danh sách các bảng chữ cái, bạn có thể tùy chỉnh mã và nhận đầu ra mong muốn như hình bên dưới

Thí dụ

for i in range[10]:
    print[i, end =" "]
9

đầu ra

0 1 2 3 4 5 6 7 8 9
0

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

Thí dụ

0 1 2 3 4 5 6 7 8 9
1

đầu ra

0 1 2 3 4 5 6 7 8 9
2

Sử dụng chỉ mục

Chỉ mục được sử dụng với phạm vi để nhận 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 phạm vi [5] [0] và phạm vi giá trị tiếp theo [5] [1], v.v.

Thí dụ

0 1 2 3 4 5 6 7 8 9
3

đầu ra

0 1 2 3 4 5 6 7 8 9
3

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 danh sách [] nó sẽ trả về các phần tử từ phạm vi [] ở định dạng danh sách

Thí dụ

for i in range[10]:
    print[i, end =" "]
5

đầu ra

0 1 2 3 4 5 6 7 8 9
6

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

Thí dụ. Nhận số chẵn bằng cách sử dụng phạm vi []

Sử dụng phạm vi [] sẽ nhận được 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 phạm vi [] là, bắt đầu là 2, dừng là 20 và bước là 2, vì vậy các giá trị sẽ được tăng thêm 2 và sẽ cho các số chẵn cho đến khi dừng 2

Thí dụ

0 1 2 3 4 5 6 7 8 9
7

đầu ra

0 1 2 3 4 5 6 7 8 9
8

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

Trong ví dụ này sẽ nối 2 hàm range[] với sự trợ giúp của hàm itertools module chain[]

Thí dụ

0 1 2 3 4 5 6 7 8 9
9

đầu ra

for i in range[3, 10]:
    print[i, end =" "]
0

Sử dụng phạm vi [] Với NumPy

Mô-đun NumPy có hàm arange[] hoạt động và cho đầu ra tương tự như phạm vi[]. Sắp xếp [] nhận các tham số giống như phạm vi []

cú pháp

for i in range[3, 10]:
    print[i, end =" "]
1

Để 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

for i in range[3, 10]:
    print[i, end =" "]
2

Trường hợp trong khi thực hiện nó báo lỗi không tìm thấy mô-đun numpy, bạn cần cài đặt mô-đun như trong bước 2

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

for i in range[3, 10]:
    print[i, end =" "]
3

Bước 3. Ví dụ hoạt động của arange[] sử dụng NumPy

for i in range[3, 10]:
    print[i, end =" "]
4

đầ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 chuỗi dấu phẩy động bằng phạm vi [], nhưng có thể sử dụng NumPy arange []

Thí dụ

Phạm vi mà chúng tôi muốn là từ 0. 5 ăn 1. 5. Giá trị sẽ tăng thêm 0. 2

for i in range[3, 10]:
    print[i, end =" "]
6

đầu ra

for i in range[3, 10]:
    print[i, end =" "]
7

Đầu ra chúng tôi nhận được hơi lạ, một số số float đượ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 thành đị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 ở vị trí thập phân mà bạn cần

Chủ Đề