Python دالة map() مع أمثلة

⚡ ملخص ذكي

Python تُطبّق الدالة map() دالةً مُحددةً على كل عنصر من عناصر كائن قابل للتكرار، مثل القوائم، والصفوف، والمجموعات، والقواميس، والسلاسل النصية. تُعيد هذه الدالة كائن map مُؤجلًا، والذي يُمكن تحويله باستخدام الدالة list() أو تكراره باستخدام حلقة تكرارية.

  • 🔢 بناء الجملة: تأخذ الدالة map() دالة بالإضافة إلى عنصر واحد أو أكثر من العناصر القابلة للتكرار وتطبق تلك الدالة على كل عنصر.
  • 🔁 قيمة الإرجاع: تقوم الدالة map() بإرجاع كائن map كسول، لذا قم بتغليفه في list() أو tuple() أو set() لعرض النتائج.
  • 🧩 الكائنات القابلة للتكرار: تعمل القوائم والصفوف والمجموعات والقواميس والسلاسل النصية جميعها كمدخلات للدالة map().
  • لامدا: يؤدي استخدام دالة map() مع تعبير لامدا إلى تجنب تعريف دالة مسماة منفصلة للتحويلات البسيطة.
  • عناصر قابلة للتكرار متعددة: يؤدي تمرير عدة عناصر قابلة للتكرار إلى تطبيق الدالة عليها بالتوازي، ثم يتوقف.ping بأقصر طول ممكن.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم المساعدات المدعومة بالذكاء الاصطناعي مثل GitHub Copilot بإنشاء استدعاءات map()، وتقوم التحويلات على نمط الخريطة بتغذية مسارات البيانات في التعلم الآلي.

Python وظيفة الخريطة ().

بناء الجملة

map(function, iterator1,iterator2 ...iteratorN)

المعاملات

إليكم معيارين مهمين:

  • وظيفة: دالة إلزامية يجب إعطاؤها لـ map()، والتي سيتم تطبيقها على جميع العناصر المتاحة في المكرر.
  • مكرر: كائن قابل للتكرار إلزامي. يمكن أن يكون قائمة، أو صفًا، أو ما شابه. يمكنك تمرير عدة كائنات تكرار إلى دالة map().

قيمة الإرجاع

تقوم الدالة map() بتطبيق الدالة المعطاة على جميع العناصر الموجودة داخل المكرر وتعيد كائن خريطة قابل للتكرار، أي مجموعة، قائمة، إلخ.

كيف تعمل وظيفة الخريطة ()؟

تأخذ الدالة map() مُدخلين: دالة وكائن قابل للتكرار. الدالة المُعطاة لـ map() هي دالة عادية، وتُكرر العملية على جميع القيم الموجودة في الكائن القابل للتكرار.

على سبيل المثال، لنفترض أن لديك قائمة من الأرقام، وتريد إيجاد مربع كل رقم.

للحصول على الناتج، نحتاج إلى دالة تُعيد مربع العدد المُعطى. الدالة هي كالتالي:

def square(n):
	return n*n

فيما يلي قائمة العناصر التي نريد إيجاد مربعها:

my_list = [2,3,4,5,6,7,8,9]

والآن دعونا نستخدم الدالة المدمجة map() للحصول على مربع كل عنصر من العناصر الموجودة في my_list.

الكود النهائي هو كما يلي:

def square(n):
    return n*n
my_list = [2,3,4,5,6,7,8,9]
updated_list = map(square, my_list)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x0000002C59601748>
[4, 9, 16, 25, 36, 49, 64, 81]

كما هو موضح أعلاه، فإن ناتج دالة map() هو كائن خريطة يتم عرضه على الشاشة كـ .

ستحتاج إلى تكرار مخرجات الدالة map() باستخدام حلقة for أو الدالة list() للحصول على الناتج النهائي. لقد استخدمتُ الدالة list() في الكود لعرض القيم الموجودة داخل القائمة المُعطاة.

باستخدام الدالة map()، تمكّنا من الحصول على مربع كل عدد. كانت القائمة المُعطاة للدالة map() هي [2,3,4,5,6,7,8,9]، وباستخدام الدالة square()، كانت النتيجة [4, 9, 16, 25, 36, 49, 64, 81].

تُطبّق الدالة map() الدالة square() على جميع عناصر القائمة. على سبيل المثال، تأخذ الدالة المتغير my_list وتُحدّث القائمة بمربع كل عدد. ويتم تخزين الناتج في المتغير updated_list.

باستخدام الخريطة () مع Python وظائف مدمجة

استخدم Python وظيفة Map() هي وظيفة مضمنة ويمكن استخدامها أيضًا مع الوظائف المضمنة الأخرى المتوفرة في Pythonفي هذا المثال، سنستخدم Python دالة round() المدمجة تقوم بتقريب القيم المعطاة.

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

القائمة التي لدي هي my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]. أحتاج إلى القيم المقربة لكل عنصر في القائمة، لذا سنستخدم الدالة round() كدالة لـ map().

my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]
updated_list = map(round, my_list)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x000000E65F901748>
[3, 4, 4, 6, 6, 8, 8, 10]

يتم تطبيق الدالة round() على جميع العناصر الموجودة في القائمة، وهي تُرجع قائمة بجميع القيم المقربة، كما هو موضح في المخرجات.

استخدام الخريطة () مع سلسلة كمكرر

يمكننا أيضًا الاستفادة من الخريطة () على سلسلة. في Python، تعمل السلسلة النصية مثل المصفوفة، لذلك يمكننا استخدامها بسهولة داخل دالة map().

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

def myMapFunc(s):
    return s.upper()
my_str = "welcome to guru99 tutorials!"
updated_list = map(myMapFunc, my_str)
print(updated_list)
for i in updated_list:
    print(i, end="")

الإخراج:

<map object at 0x000000DF2E711748>
WELCOME TO GURU99 TUTORIALS!

استخدام دالة map() مع قائمة من Numbers

للعمل مع قائمة في دالة map()، سنأخذ قائمة من الأرقام ونضرب كل رقم في القائمة في 10.

القائمة التي سنستخدمها هي [2، 3، 4، 5، 6، 7، 8، 9]. تقوم الدالة myMapFunc() بضرب العدد المُعطى في 10. تُمرر هذه الدالة إلى الدالة map() مع القائمة.

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

def myMapFunc(n):
    return n*10

my_list = [2,3,4,5,6,7,8,9]

updated_list = map(myMapFunc, my_list)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x000000EE2C061898>
[20, 30, 40, 50, 60, 70, 80, 90]

والنتيجة التي نراها هي أن كل رقم في القائمة مضروب في 10.

باستخدام الخريطة () مع Tuple

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

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

def myMapFunc(n):
    return n.upper()

my_tuple = ('php','java','python','c++','c')

updated_list = map(myMapFunc, my_tuple)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x0000009C3C3A16A0>
['PHP', 'JAVA', 'PYTHON', 'C++', 'C']

الناتج الذي نحصل عليه هو مجموعة مرتبة مع تحويل جميع القيم الموجودة فيها إلى أحرف كبيرة.

استخدام الخريطة () مع القاموس

A القاموس في Python يتم إنشاء القاموس باستخدام الأقواس المعقوفة ({}). وبما أن القاموس عبارة عن مُكرِّر، يمكنك استخدامه داخل دالة map(). لنستخدم الآن قاموسًا كمُكرِّر داخل دالة map().

يوضح المثال التالي كيفية عمل مُكرِّر القاموس داخل الدالة map():

def myMapFunc(n):
    return n*10
my_dict = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_dict)
print(finalitems)
print(list(finalitems))

الإخراج:

<map object at 0x0000007EB451DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

باستخدام الخريطة () مع Set

مجموعة في Python هي مجموعة غير مرتبة من العناصر الموجودة بين قوسين معقوفين ({}). وبما أن الدالة set() هي أيضاً دالة تكرار، يمكنك استخدامها داخل الدالة map().

إليك مثال عملي لاستخدام مجموعة كعنصر تكرار داخل دالة map():

def myMapFunc(n):
    return n*10
my_set = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_set)
print(finalitems)
print(list(finalitems))

الإخراج:

<map object at 0x000000AC8F05DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

استخدام الخريطة () مع وظيفة لامدا

In Python، يتم استخدام تعبيرات لامدا لإنشاء وظائف مجهولة. سيتعين عليك استخدام الكلمة الأساسية lambda تمامًا كما تستخدم def لتحديد الوظائف العادية.

في هذا المثال، سنستخدم دالة لامدا داخل دالة map(). ستقوم دالة لامدا بضرب كل قيمة في القائمة في 10.

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

my_list = [2,3,4,5,6,7,8,9]
updated_list = map(lambda x: x * 10, my_list)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x000000BD18B11898>
[20, 30, 40, 50, 60, 70, 80, 90]

استخدام عدة مُكرِّرات داخل دالة map()

مثال 1: تمرير مُكرِّرَي قائمتين إلى دالة map()

يمكنك إرسال أكثر من مُكرِّر واحد، أي قائمة، أو صف، وما إلى ذلك، جميعها في نفس الوقت إلى دالة map().

على سبيل المثال، إذا أردتَ جمع قائمتين، يمكنك فعل ذلك باستخدام الدالة map(). سنستخدم قائمتين، my_list1 و my_list2.

في المثال أدناه، تتم إضافة العنصر الأول في my_list1 إلى العنصر الأول في my_list2. تأخذ الدالة myMapFunc() عناصر من my_list1 و my_list2 وتعيد مجموع كليهما.

إليك مثال عملي لإضافة قائمتين معطيتين باستخدام الدالة map().

def myMapFunc(list1, list2):
    return list1+list2

my_list1 = [2,3,4,5,6,7,8,9]
my_list2 = [4,8,12,16,20,24,28]

updated_list = map(myMapFunc, my_list1,my_list2)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x0000004D5F751860>
[6, 11, 16, 21, 26, 31, 36]

مثال 2: تمرير مجموعة واحدة ومكرر قائمة إلى دالة map()

سنستخدم مُكرِّر قائمة ومُكرِّر صف في دالة map(). ستجلب الدالة المُمرَّرة إلى map()، وهي myMapFunc()، العناصر من القائمة والصف. سيتم ربط العناصر باستخدام شرطة سفلية (_). يظهر المثال العملي أدناه:

def myMapFunc(list1, tuple1):
    return list1+"_"+tuple1

my_list = ['a','b', 'b', 'd', 'e']
my_tuple = ('PHP','Java','Python','C++','C')

updated_list = map(myMapFunc, my_list,my_tuple)
print(updated_list)
print(list(updated_list))

الإخراج:

<map object at 0x00000059F37BB4E0>
['a_PHP', 'b_Java', 'b_Python', 'd_C++', 'e_C']

الأسئلة الشائعة

كلاهما يُطبّق عمليةً على كل عنصر. غالبًا ما يكون بناء القائمة أكثر وضوحًا ويُعيد قائمةً مباشرةً، بينما تُعيد الدالة map() كائن خريطة مُؤجل، وقد تكون أسرع عند إعادة استخدام دالة مُسماة موجودة.

لا، الدالة map() لا تُغير الكائن الأصلي القابل للتكرار. فهي تقرأ كل عنصر، وتُطبق دالتك، وتُنتج كائن map جديدًا مُؤجلًا، تاركةً قائمة المصدر أو الصف أو السلسلة دون تغيير.

In Python 3. دالة map() كسولة: فهي تُعيد كائن خريطة يُحسب القيم فقط عند المرور عليه. هذا يُوفر الذاكرة عند التعامل مع البيانات الكبيرة. استخدم دالة list() أو حلقة تكرارية للحصول على النتائج.

تقوم الدالة map() بتحويل كل عنصر، بينما تحتفظ الدالة filter() فقط بالعناصر التي تجتاز الاختبار، وتقوم الدالة reduce() (من مكتبة functools) بدمج جميع العناصر في قيمة واحدة. وتغطي هذه الدوال مجتمعة عمليات التحويل والاختيار والتجميع.

عندما تختلف العناصر القابلة للتكرار في الطول، تتوقف دالة map() عند أقصرها. يتم تجاهل العناصر الزائدة في العناصر الأطول، لذلك لا يتم طرح أي خطأ وتكون النتيجة مطابقة لأقصر عنصر قابل للتكرار.

لا. كائن الخريطة هو مُكرِّر يُستنفد بعد دورة واحدة. بمجرد المرور عليه أو استدعاء دالة list() عليه، يصبح فارغًا. حوّله إلى قائمة أولًا إذا كنت بحاجة إلى إعادة استخدامه.

في مجال التعلم الآلي، تُطبّق دالة map() وظائف المعالجة المسبقة على مجموعات البيانات، مثل تحجيم الأرقام، وتقسيم النصوص إلى رموز، أو تحويل الميزات قبل التدريب. وهي توفر طريقة سلسة وفعّالة لتنفيذ العملية نفسها على العديد من العينات.

نعم. يقوم GitHub Copilot بإكمال استدعاءات map() تلقائيًا بالدالة الصحيحة والعناصر القابلة للتكرار، ويمكن لأدوات الذكاء الاصطناعي إعادة هيكلة الحلقات إلى تعبيرات map()، ثم تشغيل اختباراتك للتأكد من أن السلوك لم يتغير.

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