دالة خريطة بايثون () ، موضحة بأمثلة
نشرت: 2022-08-25في هذا البرنامج التعليمي ، ستتعلم كيفية استخدام وظيفة خريطة Python () لتطبيق دالة على جميع العناصر القابلة للتكرار.
تدعم Python نموذج البرمجة الوظيفية الذي يسمح لك بتحديد المهام كحساب للوظائف برمجيًا. يمكنك التعامل مع وظائف Python ككائنات: يمكن أن تأخذ الوظيفة وظيفة أخرى كمعامل وتعيد وظيفة أخرى.
تأخذ الدالة map()
دالة كوسيطة وتتيح لك تطبيقها على جميع العناصر في تسلسل.
بنهاية هذا البرنامج التعليمي ، ستكون قادرًا على استخدام وظيفة map()
Python - لإعادة كتابة الحلقات المطولة وقائمة الفهم. ستقوم بتشفير العديد من الأمثلة لفهم الطرق المختلفة التي يمكنك من خلالها استخدام وظيفة map()
.
كيفية تطبيق دالة على عناصر قائمة بايثون

لنبدأ مناقشتنا بمثال.
هنا nums
هي قائمة بالأرقام.
nums = [2,4,3,7]
بعد ذلك ، ضع في اعتبارك الوظيفة self_pow()
. تأخذ الدالة self_pow()
رقمًا كوسيطة وتعيد الرقم المرفوع إلى قوة الرقم نفسه: n ** n.
في بايثون ، ** هي عامل الأُس. تُرجع a ** b قيمة a مرفوعة إلى الأس b ، a b .
def self_pow(n): return n**n
TO-DO : لإنشاء قائمة جديدة
nums_pow
من خلال تطبيق الوظيفةself_pow()
على كل عنصر في قائمةnums
.
باستخدام لوب
للقيام بذلك ، يمكنك استخدام حلقات for في بايثون:
- لكل رقم في قائمة الأعداد ، استدع الدالة
nums
self_pow()
معnum
كوسيطة. - قم بإلحاق نتيجة استدعاء الوظيفة بالقائمة الجديدة
nums_pow
.
nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)
في الإخراج ، يتم رفع كل عدد من nums
إلى نفسه. العناصر الموجودة في قائمة nums_pow
هي كما يلي: 2 2 ، 4 4 ، 3 3 ، 7 7 .
Output [4, 256, 27, 823543]
استخدام قائمة الفهم
يمكنك جعل هذا موجزا باستخدام قائمة الفهم. من حلقة for الصريحة أعلاه ، يمكننا تحديد تعبير الإخراج ، والقائمة المراد تكرارها.

يمكننا بعد ذلك تعديل تعبير فهم القائمة العامة:
new_list = [<output expression> for item in iterable]
يكون تعبير list comprehension لتوليد nums_pow
كما يلي:
nums_pow = [self_pow(num) for num in nums] print(nums_pow)
الإخراج هو نفسه من استخدام حلقات for ، كما هو متوقع.
Output [4, 256, 27, 823543]
بدلاً من التكرار الحلقي والقائمة ، يمكنك استخدام دالة map()
باستخدام صيغة موجزة تساعد في تطبيق الوظيفة على جميع العناصر الموجودة في العناصر القابلة للتكرار. لنبدأ بتعلم بناء جملة وظيفة الخريطة.
خريطة بايثون () بناء الجملة

الصيغة العامة لاستخدام وظيفة map()
هي كما يلي:
map(function, iterable_1,[iterable_2,...,iterable_n])
تأخذ الدالة map()
وسيطتين على الأقل ، دالة وقابلة للتكرار .
في النحو أعلاه:
- دالة تشير إلى دالة بايثون أو بشكل عام أي لغة بايثون قابلة للاستدعاء. يتضمن ذلك الوظائف المحددة والمضمنة من قِبل المستخدم ، والفئات ، وطرق المثيل والفئة ، والمزيد.
- قابل للتكرار هو أي لغة Python قابلة للتكرار ، مثل list و tuple و string.
- تقوم الوظيفة map () بتطبيق الوظيفة على كل عنصر في العنصر القابل للتكرار
ماذا ترجع الدالة map ()؟
تقوم بإرجاع كائن الخريطة. يمكنك بعد ذلك تحويل كائن الخريطة إلى قائمة باستخدام الصيغة: list(map(function,iterable)).
اعتمادًا على حالة الاستخدام ، يمكنك تحويلها إلى مجموعة Python.

الآن بعد أن تعلمت بناء جملة دالة map()
، فلنبدأ في أمثلة الترميز.
يجب أن يكون لديك Python 3.x لمتابعة هذا البرنامج التعليمي. عدا ذلك ، يمكنك تشغيل مقتطفات التعليمات البرمجية في محرر Python عبر الإنترنت Geekflare.
كيفية استخدام وظيفة map () مع وظائف محددة من قبل المستخدم

# 1 . في السابق ، قمنا بتطبيق self_pow()
على كل رقم في قائمة nums
. في صيغة الدالة map()
، يمكننا تمرير الدالة self_pow
وقائمة nums
.
ملاحظة : يجب تحديد اسم الوظيفة فقط وليس استدعاء الوظيفة. استخدم self_pow
وليس self_pow()
.
تقوم الدالة map()
بإرجاع كائن الخريطة.
print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>
يمكننا بعد ذلك وضع كائن الخريطة في قائمة باستخدام وظيفة list () ، كما هو موضح أدناه.
nums_pow = list(map(self_pow,nums)) print(nums_pow)
هذا هو الناتج حيث يتم تعيين كل عدد بالأرقام إلى num num
nums_pow
nums
Output [4, 256, 27, 823543]
# 2 . ضع في اعتبارك الوظيفة التالية inch_to_cm()
التي تحول البوصة إلى سنتيمترات. 1 بوصة = 2.54 سم .
def inch_to_cm(inch): return inch*2.54
لتحويل قيم البوصة في قائمة inches
إلى سنتيمترات ، يمكنك استخدام وظيفة map()
كما هو موضح في خلية الكود أدناه.
inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)
تحتوي قائمة cms
على قيم البوصة المعبر عنها بالسنتيمتر.
Output [14.0716, 8.636, 2.54, 63.5, 20.828]
كيفية استخدام وظيفة map () مع الوظائف المضمنة

في هذا القسم ، سنتعلم كيفية استخدام map()
مع الوظائف المضمنة في Python.
# 1 . strings
القائمة هي قائمة لغات البرمجة. ترغب في إنشاء قائمة جديدة strings_upper
تحتوي على سلاسل لغة البرمجة بأحرف كبيرة.
strings = ['JavaScript','Rust','Python','Go']
تعمل طريقة السلسلة
.upper()
على سلسلة وترجع نسخة منسقة بأحرف كبيرة.
strings_upper = list(map(str.upper,strings)) print(strings_upper)
تتضمن قائمة strings_upper
سلاسل في strings
القائمة المنسقة بأحرف كبيرة.
Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']
# 2 . تأخذ وظيفة len()
المضمنة في Python تسلسلاً كوسيطة وتعيد طولها. للعثور على طول كل سلسلة في قائمة strings
، يمكننا استخدام وظيفة map()
وتطبيق دالة الطول على كل سلسلة ، كما هو موضح أدناه.
strings_len = list(map(len,strings)) print(strings_len)
Output [10, 4, 6, 2]
# 3 . يمكنك استخدام الوظيفة map()
مع المجموعات الأخرى مثل المجموعات.
يحتوي المثال التالي على مجموعة تحتوي على معلومات حول عدد غرف النوم والمنطقة والمدينة التي يقع فيها المنزل.

في Python ، ترجع الدالة type()
نوع البيانات لأي كائن Python. للحصول على نوع البيانات لجميع العناصر في هذه المجموعة ، يمكنك استخدام الوظيفة map()
لاستدعاء وظيفة type
في كل عنصر من عناصر المجموعة.
house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)
لقد ألقينا كائن الخريطة في مجموعة. يمكنك أيضًا الإدلاء بقائمة أو أي مجموعة أخرى.
في الإخراج أدناه ، نرى أن أنواع البيانات 2 و 758.5 و Bangalore قد تم استنتاجها كـ "int" و "float" و "str" على التوالي.
Output (<class 'int'>, <class 'float'>, <class 'str'>)
# 4 . في Python ، يمكنك استيراد الوحدات المدمجة واستخدام الوظائف المحددة في الوحدات.
لحساب الجذر التربيعي لكل رقم في قائمة nums
، يمكنك استخدام دالة sqrt
من وحدة الرياضيات.
import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]
الإخراج أعلاه يصعب تحليله ومتابعته. قد ترغب في تقريب كل قيمة جذر تربيعي لتقول ، منزلتين عشريتين.
كيفية تقريب رقم فاصلة عائمة في بايثون
دعنا نحدد دالة round_2()
تأخذ قيمة فاصلة عائمة وتقربها إلى منزلتين عشريتين.
def round_2(num): return round(num,2)
الآن ، يمكنك استخدام الدالة map()
مع round_2
وقائمة nums_sqrt
.
nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
Output [5.48, 9.49, 5.83, 6.71, 9.85]
يمكنك أيضًا استخدام وظائف map()
المتداخلة ، حيث تُستخدم وظيفة الخريطة الداخلية لحساب list nums_sqrt
، وتنفذ وظيفة الخريطة الخارجية عملية التقريب.
nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
Output [5.48, 9.49, 5.83, 6.71, 9.85]
النواتج متطابقة في كلا النهجين أعلاه. ومع ذلك ، يجب عليك التأكد من أن الشفرة قابلة للقراءة ويمكن صيانتها عند وظائف التداخل كما هو موضح أعلاه.
كيفية استخدام وظيفة map () مع وظائف Lambda

في الأقسام السابقة ، تعلمت كيفية استخدام وظيفة Python map()
مع الوظائف المضمنة والمعرفة من قبل المستخدم. ستتعلم الآن كيفية استخدام وظيفة map () مع وظائف lambda ، والتي تكون مجهولة في Python.
في بعض الأحيان ، سيكون لديك وظيفة يحتوي جسمها على سطر واحد فقط من التعليمات البرمجية ، وقد تحتاج إلى استخدام الوظيفة مرة واحدة فقط وعدم الرجوع إليها في مكان آخر في البرنامج. يمكنك تحديد وظائف مثل وظيفة لامدا في بايثون.
ملاحظة :
lambda args: expression
هو الصيغة العامة لاستخدام دالة Python lambda.
# 1 . ضع في اعتبارك strings
القائمة التالية. لنفترض أنك تريد الحصول على قائمة strings_rev
- تحتوي على نسخة معكوسة من كل سلسلة.
strings = ['JavaScript','Rust','Python','Go']
يمكننا عكس سلسلة Python باستخدام تشريح السلسلة.
ملاحظة : هذا تعميم لتعبير السلسلة النصية
str[start:stop:step]
.- بدون قيم
start
stop
، تبدأ الشريحة في بداية السلسلة وتمتد حتى نهاية السلسلة.
- تعطي القيم السالبةstep
شرائح تبدأ من نهاية السلسلة.
- لذلك ، تقومstr[::-1]
بإرجاع نسخة معكوسة من str.
يمكنك استخدام وظيفة lambda هذه: lambda x:x[::-1]
داخل وظيفة الخريطة ، كما هو موضح أدناه.
strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)
كما هو الحال مع الأمثلة الأخرى ، نضع كائن الخريطة في قائمة. في الإخراج ، نرى أنه تم عكس كل سلسلة في سلاسل القائمة.
Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']
# 2 . في القسم السابق ، قمنا بحساب الجذر التربيعي لكل رقم في قائمة الأرقام ثم قمنا بتقريب كل قيمة جذر تربيعي إلى منزلتين عشريتين.
استخدمنا الدالة round_2()
للقيام بذلك. دعنا نعيد كتابة الدالة round_2()
كدالة لامدا ونستخدمها مع الدالة map()
الموضحة أدناه.
nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)
كما هو موضح أدناه ، الناتج مطابق لما حصلنا عليه من استخدام الدالة round_2()
.
Output [5.48, 9.49, 5.83, 6.71, 9.85]
كيفية استخدام دالة map () مع متكررات متعددة

في الأمثلة التي رأيناها ، طبقنا دالة على جميع العناصر ذات عنصر واحد قابل للتكرار بالضبط.
في بعض الأحيان ، قد يكون لدينا وظائف تأخذ وسيطتين أو أكثر. في هذه الحالة ، يتم تخزين كل وسيطة في قائمة أو أي مجموعة مماثلة.
يمكننا أيضًا استخدام وظيفة Python map () مع قوائم متعددة.
# 1 . ضع في اعتبارك area()
التي تقبل length
breadth
كمدخلات وتعيد المنطقة length*breadth
.
def area(length,breadth): return length*breadth
يتم تخزين طول وعرض المستطيلات المختلفة في قائمتين منفصلتين ، lengths
breadths
، على التوالي.
lengths = [4,8,10,18] breadths = [9,4,6,11]
يمكننا استخدام وظيفة map()
لتطبيق وظيفة المنطقة في القوائم أعلاه عن طريق تمرير كل من قوائم lengths
breadths
.
areas = list(map(area,lengths,breadths)) print(areas)
نظرًا لأن منطقة الدالة تقبل وسيطتين ، يتم استخدام قيم الطول breadths
من قوائم lengths
عرض ، على التوالي.
Output [36, 32, 60, 198]
# 2 . تحتوي وحدة الرياضيات في Python على وظيفة السجل التي تساعدنا في حساب لوغاريتم رقم لأي قاعدة.
ملاحظة : يُرجع السجل (x ، الأساسي) قيمة السجل x إلى الأساس المحدد بواسطة قاعدة القيمة ، السجل الأساسي x . إذا لم يتم تحديد الأساس ، فإن القيمة الأساسية الافتراضية هي e (السجل يحسب اللوغاريتم الطبيعي).
في هذا المثال:
- تتوافق القائمة
x
مع القيم التي ترغب في حساب اللوغاريتم لها. - تحتوي القائمة
base
على جميع القيم الأساسية لاستخدامها في حساب اللوغاريتم.
x = [2,6,12,10] base = [2,3,2,5]
يمكننا استخدام دالة خريطة Python () مع math.log
والقوائم و x
و base
للحصول على القائمة الجديدة log_x
، على النحو التالي.
log_x = list(map(math.log,x,base)) print(log_x)
ها هو الناتج.
Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]
استنتاج
فيما يلي ملخص لما تعلمته في هذا البرنامج التعليمي:
- تأخذ الدالة map () في Python وسيطتين على الأقل: دالة وقابلة للتكرار ، مع خريطة بناء الجملة (وظيفة ، قابلة للتكرار (ق)) .
- يمكن أن تكون الوظيفة أي لغة بايثون صالحة للاستدعاء.
- عندما تأخذ الدالة الوسيطات k ، استخدم الدالة
map()
مع الوظيفة وكل من وسيطات k في قابلة للتكرار.
بعد ذلك ، تعلم كيفية العمل مع المجموعات في بايثون.