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

ما هو نطاق بايثون؟

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

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

بناء الجملة

range(start, stop, step)

المعلمات

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

قيمة الإرجاع

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

نطاق بايثون () الوظيفة والتاريخ

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

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

فولوwing هي الفرق بين النطاق و xrange ():

نطاق() xrange ()
يعطي النطاق () تسلسل الأرقام ويعيد قائمة الأرقام. الدالة xrange() تعطي generator الكائن الذي يحتاج إلى تكراره في حلقة للحصول على القيم.
يقوم النطاق () بإرجاع قائمة. xrange() ترجع أ generator موضوع.
يستخدم الأسلوب range() المزيد من الذاكرة حيث يجب تخزين القائمة التي تم إرجاعها مقارنةً بـ xrange(). كما يقوم xrange() بإرجاع a generator الكائن، فهو لا يعطي قيمًا على الفور ويجب استخدامه داخل حلقة 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

النطاق العكسي: تقليل القيم باستخدام الخطوة السلبية

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

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.

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

دعونا نعمل الآن على النطاق () باستخدام أرقام الفاصلة العائمة.

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

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

تعطي بايثون خطأ لأن الدالة 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 () كقائمة

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

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

print(list(range(10)))

الإخراج:

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

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

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

لقد استخدمنا حتى الآن الأعداد الصحيحة في نطاق بايثون (). لقد رأينا أيضًا أن أرقام الفاصلة العائمة غير مدعومة في نطاق بايثون. دعونا نحاول أن نرى النتيجة فيما يتعلق بما يحدث عندما نستخدم الأحرف.

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

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]

أنه يعطي إخراج القائمة للنطاق المحدد.

مثال: الحصول على أرقام زوجية باستخدام النطاق ()

سيؤدي استخدام النطاق () إلى الحصول على قائمة الأرقام الزوجية في النطاق المحدد كمدخل. معلمات النطاق () هي، البداية هي 2، والتوقف هو 20، والخطوة هي 2، لذلك سيتم زيادة القيم بمقدار 2 وستعطي أرقامًا زوجية حتى التوقف -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، اتبع الخطوات الواردة أدناه.

الخطوة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 =" ")        

الإخراج:

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 منزلة عشرية. يحدث هذا بسبب كومplexإمكانية تخزين الأرقام العشرية العائمة في شكل ثنائي. يمكنك أيضًا تقريب القيم إذا لزم الأمر وقصرها على المنازل العشرية التي تحتاجها.

نبذة عامة

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