Python وظيفة range(): تعويم، قائمة، للحصول على أمثلة الحلقة

ما هي تفاصيل Python يتراوح؟

Python range() هي وظيفة مضمنة متاحة مع Python من Python(3.x)، ويعطي تسلسلًا من الأرقام بناءً على مؤشر البداية ومؤشر التوقف المعطى. في حالة عدم إعطاء مؤشر البداية، يتم اعتبار المؤشر 0، وسوف يزيد القيمة بمقدار 1 حتى مؤشر التوقف.

على سبيل المثال، النطاق (5) سيخرج لك القيم 0,1,2,3,4 .The Python يعد range() أمرًا مفيدًا جدًا ويستخدم في الغالب عندما يتعين عليك التكرار باستخدام حلقة for.

بناء الجملة

range(start, stop, step)

المعاملات

  • بدء: (اختياري) فهرس البداية هو عدد صحيح، وإذا لم يتم تحديده، فإن القيمة الافتراضية هي 0.
  • توقف: يحدد مؤشر الإيقاف القيمة التي يجب أن تتوقف عندها وظيفة النطاق. وهو إدخال إلزامي لوظيفة النطاق. ستكون القيمة الأخيرة دائمًا أقل بمقدار 1 من قيمة التوقف.
  • خطوة: (اختياري). قيمة الخطوة هي الرقم الذي يجب زيادة نطاق الرقم التالي به، بشكل افتراضي، هو 1.

قيمة الإرجاع

قيمة الإرجاع عبارة عن سلسلة من الأرقام من مؤشر البداية إلى مؤشر التوقف المحدد.

Python range() الوظيفة والتاريخ

Python تم تقديم range() من إصدار Python 3، قبل أن تكون xrange() هي الوظيفة.

يتم استخدام كل من range وxrange() لإنتاج تسلسل من الأرقام.

فيما يلي الفرق بين range و xrange():

نطاق() xrange ()
يعطي range() تسلسل الأرقام ويعيد قائمة من الأرقام. تعطي الدالة xrange() كائن مولد يجب وضعه في حلقة for للحصول على القيم.
يقوم النطاق () بإرجاع قائمة. تقوم xrange() بإرجاع كائن المولد.
يستخدم الأسلوب range() المزيد من الذاكرة حيث يجب تخزين القائمة التي تم إرجاعها مقارنةً بـ xrange(). نظرًا لأن xrange() ترجع كائن مولد، فهي لا تعطي قيمًا على الفور ويجب استخدامها داخل حلقة for للحصول على القيم.
يعد استخدام الذاكرة أكثر وبالتالي يكون تنفيذ التعليمات البرمجية بطيئًا عند العمل على مجموعة ضخمة من البيانات. تنفيذ التعليمات البرمجية أسرع باستخدام xrange().

باستخدام النطاق ()

يوضح هذا المثال كيفية طباعة القيم من 0 إلى 9 باستخدام النطاق ().

القيمة المستخدمة في النطاق هي 10، وبالتالي فإن الناتج هو 0 1 2 3 4 5 6 7 8 9

نظرًا لعدم تحديد البداية، يتم اعتبار البداية كـ 0 ويتم إعطاء القيمة الأخيرة حتى 9. القيمة الأخيرة تكون دائمًا أقل بـ 1 من القيمة المعطاة، أي stop-1.

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

الإخراج:

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

الإخراج:

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

الإخراج:

3 5 7 9

لقد رأينا حتى الآن كيف تعطي الدالة range() القيمة المتزايدة لقيمة التوقف المعطاة. دعونا الآن نجرب مثالاً للحصول على القيمة المتناقصة في النطاق المحدد.

زيادة القيم في النطاق باستخدام خطوة إيجابية.

يمكن استخدام خطوة المعلمة في النطاق () لزيادة/تقليل القيم. بشكل افتراضي، إنها قيمة موجبة 1. لذلك ستعطي دائمًا قيمًا متزايدة.

يجب أن تكون قيمة الخطوة موجبة إذا كنت تريد زيادة القيم كإخراج.

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

الإخراج:

1 6 11 16 21 26

Revنطاق erse: تقليل القيم باستخدام الخطوة السلبية

يمكن استخدام خطوة المعلمة ذات القيمة السالبة في النطاق () للحصول على قيم متناقصة. في المثال أدناه، تكون قيمة الخطوة سالبة، لذا سيتم تقليل الإخراج من قيمة النطاق المحدد.

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

الإخراج:

15 14 13 12 11 10 9 8 7 6

قيمة البداية هي 15، وقيمة التوقف هي 5، وقيمة الخطوة هي رقم سالب، أي -1. باستخدام الدالة range()‎ أعلاه، ستعمل على تقليل القيمة من 15 فصاعدًا حتى تصل إلى قيمة التوقف، ولكن الفرق هنا هو أن القيمة الأخيرة ستكون stop + 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() لا تدعم الأرقام ذات الفاصلة العائمة للبدء والتوقف والخطوة.

استخدام for-loop مع Python نطاق()

في هذا المثال سوف نستخدم مجموعة من الأرقام، ولنرى كيفية استخدام تكرار المجموعة داخل حلقة for باستخدام range()

على سبيل المثال:

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

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

الإخراج:

MysqlMongodb PostgreSQL Firebase

في المثال أعلاه استخدمنا len(arr_list) كقيمة التوقف. سوف تتكرر حلقة for حتى قيمة الإيقاف، أي طول المصفوفة والتي ستكون 4، حيث أن لدينا أربعة عناصر في arr_list. ستكون قيمة البداية 0 وستكون الخطوة 1. لذا ستبدأ القيم من 0 وستتوقف عند 3، أي طول المصفوفة -1 مما يعني 4 -1 = 3.

باستخدام Python range() كقائمة

في هذا المثال سوف نرى كيفية الاستفادة من الإخراج من النطاق كقائمة.

على سبيل المثال:

print(list(range(10)))

الإخراج:

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

يمكنك أن ترى أن الإخراج هو تنسيق قائمة. لم يكن من الضروري تكرار النطاق () واستخدام طريقة القائمة () يمكننا تحويل الإخراج مباشرة من تنسيق النطاق إلى تنسيق القائمة.

استخدام الأحرف في نطاق بيثون ()

حتى الآن، استخدمنا الأعداد الصحيحة في بايثون range(). كما رأينا أن الأعداد العشرية غير مدعومة في بايثون range. دعنا نحاول رؤية النتيجة فيما يتعلق بما يحدث عندما نستخدم الأحرف.

على سبيل المثال:

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

الإخراج:

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

الإخراج:

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

كيفية الوصول إلى عناصر النطاق

يمكنك الاستفادة من حلقة for للحصول على القيم من النطاق أو استخدام الفهرس للوصول إلى العناصر من النطاق ().

باستخدام للحلقة

على سبيل المثال:

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

الإخراج:

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)

الإخراج:

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

باستخدام القائمة ()

ستقوم هذه الطريقة بطباعة كافة العناصر من النطاق (). باستخدام list() سيتم إرجاع العناصر من range() بتنسيق القائمة.

على سبيل المثال:

print(list(range(10)))

الإخراج:

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

الإخراج:

2 4 6 8 10 12 14 16 18

دمج مخرجات النطاقين ().

في هذا المثال سيتم ربط وظيفتين range() بمساعدة وظيفة itertools Module chain().

على سبيل المثال:

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

الإخراج:

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

استخدام النطاق () مع NumPy

تحتوي وحدة NumPy على وظيفة arange() التي تعمل وتعطي مخرجات مماثلة مثل range(). يأخذ الترتيب () نفس المعلمات مثل النطاق ().

بناء الجملة:

arange(start, stop, step)

للعمل مع NumPy، اتبع الخطوات الواردة أدناه.

الخطوة الاولى:: استيراد وحدة NumPy

import numpy

في حالة حدوث خطأ أثناء التنفيذ، يفيد بعدم العثور على الوحدة النمطية numpy، فأنت بحاجة إلى تثبيت الوحدة كما هو موضح في الخطوة 2.

الخطوة الاولى:: قم بتثبيت NumPy

pip install numpy

الخطوة الاولى:: مثال عملي على arange() باستخدام NumPy

import numpy as np 

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

الإخراج:

0 1 2 3 4 5 6 7 8 9

الأرقام ذات الفاصلة العائمة باستخدام NumPy arange()

ليس من الممكن الحصول على تسلسل النقطة العائمة باستخدام النطاق ()، ولكن من الممكن استخدام 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 =" ")        

الإخراج:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

النتيجة التي نحصل عليها غريبة بعض الشيء، حيث تظهر بعض الأرقام العائمة بـ 16 خانة عشرية. يحدث هذا بسبب تعقيد تخزين الأرقام العائمة العشرية في تنسيق ثنائي. يمكنك أيضًا تقريب القيم إذا لزم الأمر وتقييدها بالأرقام العشرية التي تحتاجها.

ملخص

  • Python range() هي وظيفة مضمنة متاحة مع Python من Python(3.x)، ويعطي تسلسلًا من الأرقام بناءً على مؤشر البداية ومؤشر التوقف المعطى. في حالة عدم إعطاء مؤشر البداية، يتم اعتبار المؤشر 0، وسوف تزيد القيمة حتى مؤشر التوقف.
  • Python تم تقديم النطاق () من نسخة بايثون 3، قبل ذلك xrange() كانت الوظيفة.
  • تعطي الدالة range() تسلسل الأرقام وتعيد قائمة بالأرقام. تعطي الدالة xrange() كائن مولد يحتاج إلى التكرار في حلقة for للحصول على القيم.
  • يمكن استخدام خطوة المعلمة في النطاق () لزيادة/تقليل القيم. بشكل افتراضي، إنها قيمة موجبة 1. لذلك ستعطي دائمًا قيمًا متزايدة.
  • Python يعطي خطأ للأرقام ذات النقطة العائمة حيث أن دالة range() تدعم القيم الصحيحة فقط.
  • يمكن الوصول إلى القيم من النطاق () باستخدام حلقة for، باستخدام الفهرس والقائمة ()
  • تحتوي وحدة NumPy على وظيفة arange() التي تعمل وتعطي مخرجات مماثلة مثل range(). يأخذ arange() نفس المعلمات مثل range().
  • من الممكن الحصول على تسلسل الفاصلة العائمة NumPy arange() غير المدعوم باستخدام range().

تلخيص هذه التدوينة بـ: