أثناء البرمجة في بايثون، يجب إجراء المقارنة في كثير من الأحيان للتحقق من الشروط المختلفة. قد نحتاج إلى مقارنة متغيرين أو مجموعتين من المتغيرات للتحقق من حالة واحدة. سنحاول في هذه المقالة طرقًا مختلفة لمقارنة قائمتين في لغة بايثون. أثناء المقارنة، سيتعين علينا التحقق مما إذا كانت كلتا القائمتين تحتوي على نفس العناصر أم لا بغض النظر عن الترتيب الذي توجد به العناصر في القوائم. وبناء على ذلك، سيتعين علينا طباعة النتيجة.
قارن بين قائمتين باستخدام sort()
للتحقق مما إذا كانت القائمتان تحتويان على نفس العناصر أم لا، يمكننا استخدام التابع sort()
لفرز عناصر القائمتين أولاً. وبعد ذلك يمكننا المقارنة بين القائمتين.
للمقارنة، أولا سوف نتحقق مما إذا كان طول القوائم متساويا أم لا. إذا لم تكن الأطوال متساوية، فسيتم اعتبار القوائم مختلفة تلقائيًا.
إذا كان طول القائمتين متساويًا، فسنقوم بفرز القائمتين. ثم سنقوم بمقارنة القوائم باستخدام المعامل ==
للتحقق مما إذا كانت القوائم متساوية أم لا. إذا كانت القوائم التي تم فرزها متساوية، فسوف يثبت أن كلا القائمتين الأصليتين تحتويان على نفس العناصر. ويمكن تنفيذ ذلك على النحو التالي.
# function to compare lists
def compare(l1, l2):
# here l1 and l2 must be lists
if len(l1) != len(l2):
return False
l1.sort()
l2.sort()
if l1 == l2:
return True
else:
return False
list1 = [1, 2, 3, 4]
list2 = [1, 4, 3, 2]
list3 = [2, 3, 4, 5]
print("list1 is:",list1)
print("list2 is:",list2)
print("list3 is:",list3)
# comparing list1 and list 2
print("list1 and list2 contain same elements:",compare(list1, list2))
#comparing list2 and list3
print("list1 and list3 contain same elements:",compare(list1, list3))
و ستكون النتيجة:
list1 is: [1, 2, 3, 4]
list2 is: [1, 4, 3, 2]
list3 is: [2, 3, 4, 5]
list1 and list2 contain same elements: True
list1 and list3 contain same elements: False
المقارنة باستخدام المجموعات في بايثون
لمقارنة قائمتين في بايثون، يمكننا استخدام المجموعات. مجموعة في بايثون تسمح فقط بقيم فريدة فيها. يمكننا استخدام خاصية المجموعات هذه لمعرفة ما إذا كانت القائمتان تحتويان على نفس العناصر أم لا.
للمقارنة، أولا سوف نتحقق مما إذا كان طول القوائم متساويا أم لا. إذا لم تكن الأطوال متساوية، فسيتم وضع علامة على القوائم تلقائيًا على أنها مختلفة.
بعد ذلك، سنقوم بتحويل القوائم إلى مجموعات باستخدام set()
. يمكننا مقارنة المجموعتين باستخدام العامل ==
للتحقق مما إذا كانت المجموعتان متساويتين أم لا. إذا كانت المجموعتان متساويتين، فسيتم إثبات أن كلتا القائمتين تحتويان على قيم متساوية. المثال التالي يوضح هذا المفهوم.
# function to compare lists
def compare(l1, l2):
# here l1 and l2 must be lists
if len(l1) != len(l2):
return False
set1 = set(l1)
set2 = set(l2)
if set1 == set2:
return True
else:
return False
list1 = [1, 2, 3, 4]
list2 = [1, 4, 3, 2]
list3 = [2, 3, 4, 5]
print("list1 is:", list1)
print("list2 is:", list2)
print("list3 is:", list3)
# comparing list1 and list 2
print("list1 and list2 contain same elements:", compare(list1, list2))
# comparing list2 and list3
print("list1 and list3 contain same elements:", compare(list1, list3))
و ستكون النتيجة:
list1 is: [1, 2, 3, 4]
list2 is: [1, 4, 3, 2]
list3 is: [2, 3, 4, 5]
list1 and list2 contain same elements: True
list1 and list3 contain same elements: False
قارن بين قائمتين باستخدام عداد التردد
يمكننا أيضًا المقارنة بين قائمتين دون مقارنة أطوالهما. لهذا، سيتعين علينا أولاً إنشاء قاموس بايثون لكل قائمة والذي سيتتبع تكرار العناصر الموجودة في القوائم. بعد إنشاء القواميس حيث يتم تخزين عناصر القوائم كمفاتيح ويتم تخزين تكرارها كقيم، يمكننا مقارنة تكرار كل عنصر في القاموسين. وإذا أصبح تكرار كل عنصر متساويا، فسيتم التأكد من أن القائمتين تحتويان على عناصر متساوية.
يمكننا استخدام التابع counter()
. عند استدعائها في القائمة، تقوم بإنشاء قاموس بايثون وتخزين العناصر كمفاتيح وتكرارها كقيم فيه. بعد استدعاء التابع counter()
، يمكننا مقارنة القاموس الذي تم إنشاؤه باستخدام المعامل ==
للتحقق مما إذا كان تكرار كل عنصر متساويًا أم لا. إذا كانت النتيجة صحيحة، فإن القوائم تحتوي على عناصر متساوية. وإلا لا. ويمكن ملاحظة ذلك من المثال التالي.
import collections
# function to compare lists
def compare(l1, l2):
# here l1 and l2 must be lists
if len(l1) != len(l2):
return False
counter1 = collections.Counter(l1)
counter2=collections.Counter(l2)
if counter1 == counter2:
return True
else:
return False
list1 = [1, 2, 3, 4]
list2 = [1, 4, 3, 2]
list3 = [2, 3, 4, 5]
print("list1 is:", list1)
print("list2 is:", list2)
print("list3 is:", list3)
# comparing list1 and list 2
print("list1 and list2 contain same elements:", compare(list1, list2))
# comparing list2 and list3
print("list1 and list3 contain same elements:", compare(list1, list3))
و ستكون النتيجة:
list1 is: [1, 2, 3, 4]
list2 is: [1, 4, 3, 2]
list3 is: [2, 3, 4, 5]
list1 and list2 contain same elements: True
list1 and list3 contain same elements: False
في هذه المقالة، رأينا ثلاث طرق مختلفة لمقارنة قائمتين في بايثون وتحققنا مما إذا كانت تحتوي على نفس العناصر دون النظر إلى موضع العناصر.
في دالة compare()
المستخدمة في الأمثلة، من الممكن أن يقوم المستخدم بتمرير كائنين آخرين بدلاً من القوائم. في مثل هذه الحالات، قد يحدث خطأ في البرنامج. لتجنب ذلك، يمكننا استخدام معالجة الاستثناءات لتجنب أخطاء وقت التشغيل عن طريق تطبيق التحقق من النوع باستخدام التابع type()
في كتلة try-except للتحقق مما إذا كانت الكائنات التي تم تمريرها كوسائط هي قوائم.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.