Python range() ฟังก์ชั่น: Float, List, For loop ตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Python range() เป็นฟังก์ชันในตัวที่สร้างลำดับจำนวนเต็มที่ไม่สามารถเปลี่ยนแปลงได้ โดยเริ่มจากค่าเริ่มต้นไปจนถึงค่าสิ้นสุด แต่ไม่รวมค่าสิ้นสุด โดยใช้ขั้นตอนเสริมเพื่อควบคุมการเพิ่มขึ้น

  • 🔘 ไวยากรณ์: ฟังก์ชัน range(start, stop, step) รับค่าจำนวนเต็มได้สูงสุดสามค่า โดยค่าเริ่มต้นของ start คือ 0 และค่าเริ่มต้นของ step คือ 1
  • ☑️ จุดจอดพิเศษ: ลำดับจะหยุดก่อนดัชนีหยุดหนึ่งค่าเสมอ ดังนั้น range(5) จะให้ผลลัพธ์เป็น 0 ถึง 4
  • การควบคุมทีละขั้น: การเพิ่มค่าทีละขั้นจะทำให้ค่าเพิ่มขึ้น ในขณะที่การลดค่าทีละขั้นจะนับถอยหลังสำหรับช่วงค่าที่กลับกัน
  • 🧪 ข้อจำกัดของประเภท: รับเฉพาะจำนวนเต็มเท่านั้น หากเป็นจำนวนทศนิยมหรือสตริงจะทำให้เกิดข้อผิดพลาด TypeError
  • 🛠️ NumPy floats: ฟังก์ชัน arange() ของ NumPy ขยายพฤติกรรมของ range() ไปยังลำดับเลขทศนิยม
  • 🤖 เวิร์กโฟลว์ AI: โค้ดแมชชีนเลิร์นนิงใช้ฟังก์ชัน range() เพื่อวนซ้ำรอบการฝึกอบรม กลุ่มย่อย และตารางไฮเปอร์พารามิเตอร์

Python ช่วง () ฟังก์ชั่น

ความหมายของ Python พิสัย?

Python range() เป็นฟังก์ชันในตัวที่ใช้ได้กับ Python จาก Python (3.x) และจะแสดงลำดับตัวเลขตามดัชนีเริ่มต้นและดัชนีหยุดที่กำหนดไว้ ในกรณีที่ไม่ได้ระบุดัชนีเริ่มต้น ดัชนีจะถือเป็น 0 และจะเพิ่มค่าทีละ 1 จนถึงดัชนีหยุด

ตัวอย่างเช่น range(5) จะแสดงค่า 0, 1, 2, 3, 4 ออกมา Python `range()` เป็นคำสั่งที่มีประโยชน์มากและส่วนใหญ่ใช้เมื่อคุณต้องวนซ้ำโดยใช้ `range` สำหรับห่วง.

วากยสัมพันธ์

ไวยากรณ์ของฟังก์ชัน range() แสดงอยู่ด้านล่าง:

range(start, stop, step)

พารามิเตอร์

  • เริ่มต้น: (ทางเลือก) ดัชนีเริ่มต้นเป็นจำนวนเต็ม และหากไม่ได้ระบุ ค่าเริ่มต้นจะเป็น 0
  • หยุด: ดัชนีหยุด (stop index) กำหนดค่าที่ฟังก์ชันช่วงจะต้องหยุดทำงาน เป็นค่าที่ต้องป้อนให้กับฟังก์ชันช่วงเสมอ ค่าสุดท้ายจะน้อยกว่าค่าหยุดอยู่ 1 เสมอ
  • ขั้นตอน: (ไม่บังคับ) ค่าขั้นตอนคือจำนวนที่ต้องเพิ่มขึ้นจากจำนวนถัดไปในช่วง โดยค่าเริ่มต้นคือ 1

ส่งคืนค่า

ค่าส่งคืนเป็นลำดับตัวเลขจากดัชนีเริ่มต้นถึงหยุดที่กำหนด

Python range() ฟังก์ชั่นและประวัติ

Python range() ได้รับการแนะนำจาก Python เวอร์ชัน 3; ก่อนหน้านั้น ฟังก์ชันคือ xrange()

ฟังก์ชัน range() และ xrange() ทั้งสองฟังก์ชันใช้ในการสร้างลำดับตัวเลข

ต่อไปนี้คือความแตกต่างระหว่าง range() และ xrange():

พิสัย() เอ็กซ์เรนจ์()
range() จะให้ลำดับของตัวเลขและส่งคืนรายการของตัวเลข ฟังก์ชัน xrange() จะมอบวัตถุตัวสร้างที่ต้องวนซ้ำในฟังก์ชัน for-loop เพื่อรับค่า
range() ส่งคืนรายการ xrange() ส่งคืนวัตถุตัวสร้าง
เมธอด range() ใช้หน่วยความจำมากขึ้นเนื่องจากรายการที่ส่งคืนต้องถูกจัดเก็บเมื่อเปรียบเทียบกับ xrange() เนื่องจาก xrange() ส่งคืนอ็อบเจ็กต์ generator จึงไม่ได้ให้ค่าทันที และต้องใช้ภายในลูป for เพื่อรับค่า
การใช้งานหน่วยความจำมีมากขึ้น ส่งผลให้การประมวลผลโค้ดช้าลงเมื่อทำงานกับชุดข้อมูลขนาดใหญ่ การรันโค้ดจะเร็วขึ้นโดยใช้ xrange()

ใช้ช่วง ()

ตัวอย่างนี้แสดงวิธีการพิมพ์ค่าตั้งแต่ 0-9 โดยใช้ range()

ค่าที่ใช้ในช่วงคือ 10 ดังนั้นผลลัพธ์คือ 0 1 2 3 4 5 6 7 8 9

เนื่องจากไม่ได้ระบุค่าเริ่มต้น จึงถือว่าค่าเริ่มต้นเป็น 0 และใช้ค่าสุดท้ายจนถึง 9 โดยค่าสุดท้ายจะน้อยกว่าค่าที่กำหนดเสมอ 1 นั่นคือ stop-1

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

Output:

0 1 2 3 4 5 6 7 8 9

ใช้การเริ่มและหยุดในช่วง ()

ในโค้ด ค่าเริ่มต้นคือ 3 และค่าสิ้นสุดคือ 10 เนื่องจากดัชนีเริ่มต้นคือ 3 ดังนั้นลำดับของตัวเลขจะเริ่มจาก 3 ไปจนถึงค่าสิ้นสุด ค่าสุดท้ายในลำดับจะเป็นค่าที่น้อยกว่าค่าสิ้นสุดอยู่ 1 คือ 10-1 = 9

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

Output:

3 4 5 6 7 8 9

การใช้สตาร์ท หยุด และก้าว

ค่าเริ่มต้นคือ 3 ดังนั้นลำดับตัวเลขจะเริ่มต้นที่ 3 ค่าหยุดคือ 10 ดังนั้นลำดับตัวเลขจะหยุดที่ (10-1) หรือ 9 ค่าขั้นคือ 2 ดังนั้นแต่ละค่าในลำดับจะเพิ่มขึ้นทีละ 2 หากไม่ได้ระบุค่าขั้น ค่าเริ่มต้นของขั้นจะเป็น 1

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

Output:

3 5 7 9

ที่ผ่านมา เราได้เห็นแล้วว่าฟังก์ชัน range() จะให้ค่าที่เพิ่มขึ้นสำหรับค่าหยุดที่กำหนดให้ ต่อไปเรามาลองดูตัวอย่างการหาค่าที่ลดลงในช่วงที่กำหนดกัน

การเพิ่มค่าในช่วงโดยใช้ขั้นบวก

พารามิเตอร์ `step` ในฟังก์ชัน `range()` สามารถใช้เพื่อเพิ่มหรือลดค่าได้ โดยค่าเริ่มต้นจะเป็นค่าบวก คือ 1 ดังนั้นค่าที่ได้จะเพิ่มขึ้นเสมอ

ค่าขั้นตอนต้องเป็นค่าบวกหากคุณต้องการให้ค่าที่แสดงเป็นค่าที่เพิ่มขึ้นเรื่อยๆ

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

Output:

1 6 11 16 21 26

Reverse ช่วง: ลดค่าลงโดยใช้ขั้นตอนติดลบ

พารามิเตอร์ `step` ที่มีค่าเป็นลบในฟังก์ชัน `range()` สามารถใช้เพื่อรับค่าที่ลดลงได้ ในตัวอย่างด้านล่าง ค่าของ `step` เป็นค่าลบ ดังนั้นผลลัพธ์จะถูกลดลงจากค่าช่วงที่กำหนด

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

Output:

15 14 13 12 11 10 9 8 7 6

ค่าเริ่มต้นคือ 15 ค่าหยุดคือ 5 และค่าขั้นตอนเป็นจำนวนลบ คือ -1 ด้วยข้อมูลป้อนเข้าข้างต้น ฟังก์ชัน range() จะลดค่าลงจาก 15 ไปเรื่อยๆ จนกว่าจะถึงค่าหยุด แต่ความแตกต่างในที่นี้คือ ค่าสุดท้ายจะเป็นค่าหยุด + 1

การใช้ตัวเลขลอยตัวใน Python พิสัย()

ตอนนี้เรามาทำงานบน range() โดยใช้ตัวเลขที่มีจุดลอยตัวกัน

ตัวอย่าง:

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

ในตัวอย่างข้างต้น เราใช้ค่าหยุดที่ 10.5

ผลลัพธ์คือ:

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 เกิดข้อผิดพลาดเนื่องจากฟังก์ชัน range() ไม่รองรับตัวเลขทศนิยมสำหรับ start, stop และ step

การใช้ for-loop ด้วย Python พิสัย()

ในตัวอย่างนี้ เราจะใช้อาร์เรย์ของตัวเลขและดูวิธีการวนซ้ำอาร์เรย์ภายในลูป for โดยใช้ range()

ตัวอย่าง:

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

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

Output:

MysqlMongodb PostgreSQL Firebase

ในตัวอย่างข้างต้น เราใช้ len(arr_list) เป็นค่าหยุด การวนลูป for จะวนไปเรื่อยๆ จนกว่าจะถึงค่าหยุด นั่นคือความยาวของอาร์เรย์ ซึ่งจะเป็น 4 เนื่องจากเรามีสี่รายการใน arr_list ค่าเริ่มต้นจะเป็น 0 และขั้นตอนจะเป็น 1 ดังนั้นค่าจะเริ่มต้นจาก 0 และหยุดที่ 3 นั่นคือความยาวของอาร์เรย์ลบ 1 หมายความว่า 4 - 1 = 3

การใช้ Python range() เป็นรายการ

ในตัวอย่างนี้เราจะดูวิธีใช้เอาต์พุตจากช่วงเป็นรายการ

ตัวอย่าง:

print(list(range(10)))

Output:

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

คุณสามารถเห็นผลลัพธ์เป็นรูปแบบรายการ ไม่จำเป็นต้องวนซ้ำ range() และการใช้เมธอด list() ทำให้เราสามารถแปลงเอาต์พุตจาก range ไปเป็นรูปแบบรายการได้โดยตรง

การใช้อักขระในช่วงหลาม ()

จนถึงตอนนี้ เราได้ใช้จำนวนเต็มใน Python range() แล้ว นอกจากนี้ เรายังได้เห็นแล้วว่าตัวเลขที่มีจุดทศนิยมลอยตัวไม่ได้รับการรองรับใน Python range มาดูกันว่าจะเกิดอะไรขึ้นเมื่อเราใช้ตัวอักษร

ตัวอย่าง:

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

Output:

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

มันแสดงข้อผิดพลาดว่าไม่สามารถตีความสตริงเป็นจำนวนเต็มได้

หากต้องการรับรายการตัวอักษร คุณสามารถปรับแต่งโค้ดและรับผลลัพธ์ที่ต้องการได้ดังที่แสดงด้านล่าง:

ตัวอย่าง:

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)))

Output:

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

วิธีการเข้าถึงองค์ประกอบช่วง

คุณสามารถใช้ for-loop เพื่อรับค่าจากช่วง หรือใช้ดัชนีเพื่อเข้าถึงองค์ประกอบจาก range()

การใช้ for-loop

ตัวอย่าง:

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

Output:

0
1
2
3
4
5

การใช้ดัชนี

ดัชนีจะใช้กับช่วงเพื่อรับค่าที่มีอยู่ในตำแหน่งนั้น หากค่าช่วงคือ 5 หากต้องการรับค่าเริ่มต้น คุณสามารถใช้ช่วง (5)[0] และช่วงค่าถัดไป (5)[1] ไปเรื่อยๆ

ตัวอย่าง:

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)

Output:

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

การใช้รายการ ()

วิธีนี้จะพิมพ์องค์ประกอบทั้งหมดจาก range() การใช้ list() มันจะส่งคืนองค์ประกอบจาก range() ในรูปแบบรายการ

ตัวอย่าง:

print(list(range(10)))

Output:

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

มันให้ผลลัพธ์รายการสำหรับช่วงที่กำหนด

ตัวอย่าง: รับเลขคู่โดยใช้ range()

การใช้ฟังก์ชัน `range()` จะได้รายการของตัวเลขคู่ในช่วงที่กำหนดเป็นอินพุต พารามิเตอร์สำหรับ `range()` คือ `start` คือ 2 `stop` คือ 20 และ `step` คือ 2 ดังนั้นค่าจะเพิ่มขึ้นทีละ 2 และจะให้ตัวเลขคู่ไปจนถึง `stop-2`

ตัวอย่าง:

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

Output:

2 4 6 8 10 12 14 16 18

การรวมเอาต์พุตสองช่วง ()

ในตัวอย่างนี้ เราจะเชื่อมต่อฟังก์ชัน range() สองฟังก์ชันเข้าด้วยกันโดยใช้ฟังก์ชัน chain() จากโมดูล itertools

ตัวอย่าง:

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=" ")

Output:

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

การใช้ range() กับ NumPy

โมดูล NumPy มีฟังก์ชัน arange() ที่ใช้งานได้และให้ผลลัพธ์คล้ายกับ range() โดยฟังก์ชัน arange() รับพารามิเตอร์เดียวกันกับ range()

ไวยากรณ์:

arange(start, stop, step)

ในการใช้งาน NumPy ให้ทำตามขั้นตอนด้านล่างนี้

ขั้นตอนที่ 1: นำเข้าโมดูล NumPy

import numpy

ในกรณีที่ระหว่างการทำงาน เกิดข้อผิดพลาดแจ้งว่าไม่พบโมดูล numpy คุณต้องติดตั้งโมดูลตามขั้นตอนที่ 2

ขั้นตอนที่ 2ติดตั้ง NumPy

pip install numpy

ขั้นตอนที่ 3: ตัวอย่างการทำงานของ arange() โดยใช้ NumPy

import numpy as np

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

Output:

0 1 2 3 4 5 6 7 8 9

ตัวเลขจุดลอยตัวโดยใช้ NumPy arange()

ไม่สามารถรับลำดับเลขทศนิยมโดยใช้ range() ได้ แต่สามารถทำได้โดยใช้ NumPy arange()

ตัวอย่าง:

ช่วงที่เราต้องการคือตั้งแต่ 0.5 ถึง 1.5 โดยค่าจะเพิ่มขึ้นทีละ 0.2

import numpy as np

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

Output:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

ผลลัพธ์ที่ได้อาจดูแปลกๆ เล็กน้อย ตัวเลขทศนิยมบางตัวแสดงด้วยทศนิยม 16 ตำแหน่ง นี่เป็นเพราะความซับซ้อนในการจัดเก็บตัวเลขทศนิยมในรูปแบบไบนารี คุณสามารถปัดเศษค่าหากต้องการและจำกัดจำนวนทศนิยมให้เหลือตามที่ต้องการได้

คำถามที่พบบ่อย

In Python 3. ฟังก์ชัน `range()` จะคืนค่าเป็นอ็อบเจ็กต์ช่วง (range object) ที่ไม่สามารถเปลี่ยนแปลงได้ (immutable) และจะคืนค่าเป็นลิสต์ (list) โดยจะสร้างตัวเลขตามต้องการ หากต้องการลิสต์จริง ๆ ให้ใช้ `list(range(n))` ครอบไว้ Python 2 แสดงรายการทั้งหมดกลับมา

ค่าจุดหยุดเป็นค่าที่ไม่รวมจุดสิ้นสุด เพื่อให้ช่วง (len(items)) แมปไปยังดัชนีแบบเริ่มต้นที่ศูนย์ได้อย่างลงตัว หากต้องการรวมจุดสิ้นสุด ให้เพิ่มหนึ่งให้กับค่าจุดหยุด ตัวอย่างเช่น ช่วง (1, 11) เพื่อเริ่มนับจาก 1 ถึง 10

ไม่ การเรียกใช้ range(0, 10, 0) จะทำให้เกิดข้อผิดพลาด ValueError: range() arg 3 ต้องไม่เป็นศูนย์ เพราะค่าขั้นตอนเป็นศูนย์จะไม่สามารถไปถึงค่าหยุดได้และจะวนลูปไปเรื่อยๆ ควรใช้ค่าขั้นตอนที่เป็นบวกหรือลบแทน

ฟังก์ชัน `range()` ไม่รองรับค่าทศนิยม แต่การใช้ list comprehension สามารถปรับขนาดค่าจำนวนเต็มได้ เช่น `[x * 0.5 for x in range(0, 6)]` จะให้ผลลัพธ์เป็นค่าตั้งแต่ 0.0 ถึง 2.5 ซึ่งจะช่วยหลีกเลี่ยงการนำเข้าไลบรารี NumPy ในขณะที่ยังคงทำงานทีละขั้นตอนได้ping โดยใช้ค่าทศนิยม

ใช่แล้ว อ็อบเจ็กต์ range จะเก็บเฉพาะค่าเริ่มต้น ค่าหยุด และค่าขั้นตอนเท่านั้น ดังนั้น range(1000000) จึงใช้หน่วยความจำปริมาณน้อยและคงที่เท่ากับ range(10) ค่าต่างๆ จะถูกคำนวณทีละค่าในระหว่างการวนซ้ำ

ใช้ตัวดำเนินการ `in`: `5 in range(0, 10)` จะคืนค่า `True` สำหรับออบเจ็กต์ช่วง (range object) Python ฟังก์ชันนี้ทำการทดสอบความเป็นสมาชิกด้วยการคำนวณเลขคณิตที่รวดเร็วในเวลาคงที่ แทนที่จะสแกนทุกองค์ประกอบ จึงยังคงมีประสิทธิภาพแม้ในช่วงข้อมูลขนาดใหญ่

โค้ดแมชชีนเลิร์นนิงใช้ฟังก์ชัน range() เพื่อวนซ้ำรอบการฝึก (epochs) ทำซ้ำมินิแบตช์ (mini-batches) และสร้างตารางไฮเปอร์พารามิเตอร์ (hyperparameter grids) ฟังก์ชัน arange() และ linspace() ของ NumPy ขยายขีดความสามารถนี้ไปสู่ช่วงค่าทศนิยมสำหรับการกำหนดตารางอัตราการเรียนรู้และการกวาดค่าเกณฑ์ (threshold sweeps) ซึ่งเป็นเรื่องปกติในการทดลอง AI

ใช่แล้ว ตัวช่วยเขียนโค้ด AI เช่น GitHub Copilot สามารถเติมข้อความอัตโนมัติสำหรับลูปแบบ range() จากความคิดเห็นหรือชื่อฟังก์ชัน และเครื่องมือแบบเอเจนต์สามารถปรับโครงสร้างลูปดัชนีใหม่ให้เป็นรูปแบบ enumerate() หรือ comprehension ที่ดูสะอาดตาขึ้นได้ แม้ว่าขอบเขตที่สร้างขึ้นยังคงต้องได้รับการตรวจสอบอย่างรวดเร็วอีกครั้งก็ตาม

สรุปโพสต์นี้ด้วย: