تقليل القوائم إلى قيمة واحدة باستخدام دالة reduce() في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

تقليل القوائم إلى قيمة واحدة باستخدام دالة reduce() في Python

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

ما هي دالة reduce() في Python؟

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

لكي تتمكن من استخدام reduce()، يجب استيرادها أولاً من مكتبة functools:

from functools import reduce

كيفية استخدام reduce() لتقليل القوائم

دالة reduce() تأخذ معاملين رئيسيين:

  • الدالة التي تُطبق على القائمة (يجب أن تقبل معاملين).
  • القائمة أو الهيكل القابل للتكرار الذي ترغب في تقليله.

مثال 1: استخدام reduce() لحساب مجموع الأرقام

from functools import reduce

def add(x, y):
    return x + y

numbers = [1, 2, 3, 4, 5]
result = reduce(add, numbers)

print('مجموع الأرقام هو:', result) # الناتج سيكون: مجموع الأرقام هو: 15

في هذا المثال، دالة add تقوم بإضافة رقمين. يتم تمرير دالة add مع القائمة numbers إلى reduce() لحساب مجموع جميع الأرقام.

استخدام lambda مع reduce()

يمكنك استخدام تعبيرات lambda بدلًا من تعريف دالة منفصلة. تعبيرات lambda تسمح لك بكتابة الدالة بشكل مختصر داخل reduce() نفسها.

مثال 2: استخدام lambda لحساب مجموع الأرقام

from functools import reduce

numbers = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, numbers)

print('مجموع الأرقام هو:', result) # الناتج سيكون: مجموع الأرقام هو: 15

في هذا المثال، بدلاً من استخدام دالة add، استخدمنا تعبير lambda المختصر لحساب مجموع الأرقام.

تقليل القوائم باستخدام عمليات أخرى

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

مثال 3: استخدام reduce() لحساب حاصل ضرب الأرقام

from functools import reduce

def multiply(x, y):
    return x * y

numbers = [1, 2, 3, 4, 5]
result = reduce(multiply, numbers)

print('حاصل ضرب الأرقام هو:', result) # الناتج سيكون: حاصل ضرب الأرقام هو: 120

في هذا المثال، تم استخدام reduce() لحساب حاصل ضرب جميع الأرقام في القائمة.

مثال 4: إيجاد أكبر قيمة في القائمة باستخدام reduce()

from functools import reduce

def find_max(x, y):
    return max(x, y)

numbers = [1, 8, 3, 7, 5]
result = reduce(find_max, numbers)

print('أكبر رقم هو:', result) # الناتج سيكون: أكبر رقم هو: 8

في هذا المثال، تم استخدام reduce() لإيجاد أكبر قيمة في القائمة باستخدام دالة max.

استخدام reduce() مع القيم الافتراضية (Initial Values)

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

مثال 5: استخدام قيمة ابتدائية مع reduce()

from functools import reduce

numbers = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, numbers, 10)

print('المجموع مع القيمة الابتدائية هو:', result) # الناتج سيكون: المجموع مع القيمة الابتدائية هو: 25

في هذا المثال، تم تمرير 10 كقيمة ابتدائية، لذا تم بدء عملية الجمع من 10.

التطبيقات العملية لدالة reduce()

تُستخدم reduce() في العديد من التطبيقات اليومية، بما في ذلك:

  • جمع أو ضرب القيم العددية: مثل المجموع الكلي لعدد من القيم أو حاصل ضربها.
  • إيجاد القيم القصوى أو الدنيا: عن طريق تطبيق دوال مثل max أو min.
  • دمج النصوص: يمكنك استخدام reduce() لدمج قائمة من السلاسل النصية في سلسلة واحدة.

مثال 6: دمج قائمة من السلاسل النصية

from functools import reduce

words = ['Python', 'is', 'awesome']
sentence = reduce(lambda x, y: x + ' ' + y, words)

print(sentence) # الناتج سيكون: Python is awesome

في هذا المثال، تم استخدام reduce() لدمج قائمة من الكلمات في جملة واحدة.

مقارنة بين reduce() و for loop

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

مثال 7: مقارنة بين reduce() و حلقة for

# باستخدام reduce()
from functools import reduce
numbers = [1, 2, 3, 4, 5]
result_reduce = reduce(lambda x, y: x + y, numbers)

# باستخدام for loop
result_for = 0
for num in numbers:
    result_for += num

print(result_reduce) # الناتج: 15
print(result_for) # الناتج: 15

في هذا المثال، يتم مقارنة استخدام reduce() مع حلقة for لتحقيق نفس النتيجة.

الخلاصة

تعتبر دالة reduce() في Python أداة قوية ومرنة لتقليل القوائم أو هياكل البيانات الأخرى إلى قيمة واحدة. باستخدامها مع العمليات الحسابية البسيطة أو حتى المعقدة، يمكنك تقليل عدد كبير من البيانات إلى قيمة واحدة بشكل فعال. وعلى الرغم من أن نفس النتائج يمكن تحقيقها باستخدام حلقات for، إلا أن reduce() توفر طريقة مختصرة وأكثر وضوحًا للتعامل مع البيانات.

طور مهاراتك: مقالات يجب قراءتها في البرمجة