كيفية فرز القوائم في بايثون

نشرت: 2022-03-30

ستعلمك هذه المقالة كيفية فرز قائمة في بايثون.

في Python ، يمكنك استخدام طريقة sort () لفرز القائمة في مكانها. أو يمكنك استخدام وظيفة الفرز المضمنة () للحصول على نسخة مرتبة من القائمة.

ستتعلم في هذا البرنامج التعليمي:

  • بناء جملة طريقة sorted() sort() Sorted ()
  • أمثلة التعليمات البرمجية لقوائم الفرز بترتيب تصاعدي وتنازلي
  • تخصيص الفرز باستخدام المعلمة key
  • الفرق بين sort() مقابل sorted()

لنبدأ!

بناء جملة طريقة فرز بايثون ()

تعمل طريقة sort() في قائمة Python. ويقوم بفرز القائمة في مكانها — وتعديل القائمة الأصلية.

صيغة طريقة sort() في بايثون هي:

 <list>.sort(reverse = True | False, key = <func>)

دعنا الآن نحلل بناء الجملة أعلاه.

  • <list> هو أي كائن قائمة Python صالح.
  • reverse هو معلمة اختيارية تأخذ إما True أو False.
  • القيمة الافتراضية reverse هي False ، ويتم فرز القائمة بترتيب تصاعدي. امنح True لفرز القائمة بترتيب تنازلي.
  • key هو أيضًا معلمة اختيارية يتم تعيينها على <func> .
  • يمكن أن يكون <func> وظيفة مضمنة أو وظيفة محددة بواسطة المستخدم.

في القسم التالي ، ستبدأ في ترميز أمثلة بسيطة.

كيفية فرز قائمة بايثون بترتيب تصاعدي

ضع في اعتبارك nums القائمة. لفرز القائمة بترتيب تصاعدي ، يمكنك استدعاء طريقة sort() في القائمة.

قم بتشغيل مقتطف التعليمات البرمجية التالي.

 nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]

تم فرز قائمة nums بترتيب تصاعدي ، وتم تعديل القائمة الأصلية. وهذا ما يسمى بالفرز الموضعي .

كيفية فرز قائمة بايثون بترتيب تنازلي

لفرز القائمة بترتيب تنازلي ، اضبط reverse على True ، كما هو موضح أدناه.

 nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]

يمكنك أن ترى أن القائمة مرتبة الآن بترتيب تنازلي.

كيفية استخدام مفتاح مع طريقة فرز بايثون

في هذا القسم ، دعنا نستخدم المعلمة key ونخصص الفرز.

هنا ، mod5() هي دالة تأخذ الرقم x ، وترجع الباقي عندما يتم قسمة الرقم x على 5.

 def mod5(x): return x % 5

ونود استخدام الوظيفة المذكورة أعلاه key .

الآن ، قم بتشغيل خلية التعليمات البرمجية التالية.

 nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]

يستغرق دقيقة لتحليل الإخراج.

لاحظ أنه بدلاً من الفرز العادي ، تقوم الآن بتخصيص الفرز وفقًا key وهو mod5 .

  • الرقم الذي يترك الحد الأدنى المتبقي عند القسمة على 5 يأتي أولاً الآن.
  • والرقم الذي يترك الباقي الأكبر عند القسمة على 5 هو العنصر الأخير في القائمة التي تم فرزها.

للتحقق من هذه الحالة ، قم بتشغيل مقتطف الشفرة التالي.

 nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 5

5 تقسم 25 بالضبط ، والباقي هو 0. إذن هذا هو العنصر الأول في القائمة المصنفة. 6 يترك الباقي 1 ، لذلك فهو العنصر الثاني ، وهكذا. 9 يترك الباقي 4 عند القسمة على 5 ، وهو العنصر الأخير في القائمة المصنفة.

بدلاً من تحديد وظيفة منفصلة ، يمكنك أيضًا استخدام وظائف lambda. في لغة بايثون ، لامدا هي وظائف مجهولة من سطر واحد. lambda args: يعيد التعبير التعبير المحسوب على args .

الآن ، دعنا نعيد كتابة الفرز أعلاه باستخدام تعبير lambda ، كما هو موضح أدناه.

 nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]

لقد تعلمت حتى الآن كيفية فرز قائمة الأرقام. بعد ذلك ، دعنا نرى كيف يمكنك فرز قائمة سلاسل في Python.

كيفية فرز قائمة بايثون بالترتيب الأبجدي

في هذا القسم ، ستتعلم فرز قائمة من السلاسل - بأمثلة مستوحاة من هاري بوتر.

قائمة فرز بيثون

في مثالنا ، students هم قائمة الطلاب في هوجورتس. ونرغب في تصنيفهم حسب الترتيب الأبجدي لأسمائهم.

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

 students = ["Harry","Ron","Hermione","Draco","Cedric"]

دعونا نطبع القائمة التي تم فرزها للتحقق من نتيجة الفرز.

 students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

كيفية فرز قائمة Python بترتيب أبجدي عكسي

لفرز القائمة بترتيب أبجدي عكسي ، اضبط reverse = True ، كما هو موضح في مقتطف الشفرة أدناه.

 students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

من الناتج ، يمكنك أن ترى أن القائمة قد تم فرزها بالفعل بترتيب عكسي.

كيفية استخدام مفتاح المعلمة تخصيص الفرز

في هذا القسم ، دعنا نخصص الفرز باستخدام معلمة key الاختيارية.

النظر في القائمة التالية ، houses .

 houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]

هنا ، houses هي قائمة من القواميس. يحتوي كل قاموس على زوجين من قيم المفاتيح ، أحدهما يشير إلى أسماء الطلاب والآخر يشير إلى المنزل الذي ينتمون إليه.

الآن ، نود أن نفرز هذه القائمة بالترتيب الأبجدي للمنازل التي ينتمون إليها.

كما قد تكون خمنت الآن ، يجب علينا تعيين المعلمة key لمنزل الطلاب المعينين.

لاسترداد منزل كل طالب ، يمكنك تحديد وظيفة returnHouse() ، كما هو موضح أدناه.

 def returnHouse(student): return student['house']

تقوم هذه الوظيفة بإرجاع المنزل الذي ينتمي إليه الطالب المعين.

الآن ، يمكنك استدعاء طريقة sort() في قائمة المنازل ، كما هو موضح.

 houses.sort(key=returnHouse)

في الإخراج أدناه ، لاحظ كيف يتم فرز القائمة حسب المنزل وليس حسب أسماء الطلاب. لهذا السبب لدينا جريفندور ، وهافلباف ، وسليذرين - بترتيب أبجدي.

 print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

لتحديد المعلمة key وفقًا لذلك ، يمكنك أيضًا استخدام وظيفة lambda. لكل عنصر قائمة ، ترجع هذه الوظيفة المنزل لعنصر القائمة هذا.

قم بتشغيل خلية التعليمات البرمجية التالية للتحقق من ذلك.

 houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

في جميع الأمثلة حتى الآن ، استخدمت طريقة sort() في القائمة. وأنت تعلم الآن أنه يعدل القائمة الأصلية.

ماذا لو كنت ترغب في الاحتفاظ بالقائمة الأصلية كما هي ولكن الحصول على نسخة مرتبة من القائمة؟

حسنًا ، في Python ، يمكنك استخدام الوظيفة sorted() للقيام بذلك.

بناء جملة Python Sorted () Function

تأخذ الدالة sorted() قائمة أو أي مجموعة كوسيطة. وتقوم بإرجاع نسخة مرتبة من القائمة - ولا يتم تعديل القائمة الأصلية.

صيغة الدالة sorted() في Python هي:

 <sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

لاحظ كيف أن بناء الجملة مشابه جدًا لطريقة sort() التي رأيناها سابقًا.

  • <list> هو أي كائن قائمة Python صالح وهو معلمة مطلوبة .
  • reverse key هي معلمات اختيارية

ملاحظة : على عكس طريقة sort() التي تعمل فقط على القوائم ، يمكن استخدام دالة sorted() لفرز أي لغة Python قابلة للتكرار ، مثل القوائم ، والسلاسل ، والقواميس.

كيفية فرز قائمة Python باستخدام دالة Sorted ()

# 1. في هذا المثال ، nums هي قائمة بالأرقام.

يمكنك استدعاء الدالة nums sorted() باستخدام الأعداد كوسيطة. وإسنادها إلى قائمة sorted_nums1 .

 nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]

في الإخراج أعلاه ، يمكنك أن ترى أنه تم فرز nums بترتيب تصاعدي افتراضيًا.

لاحظ أيضًا أن أرقام القائمة الأصلية لم يتم تعديلها - لأن nums sorted() تُرجع قائمة جديدة. تم التحقق من هذا أدناه.

 print(nums) # Output: [25, 13, 6, 17, 9]

# 2 . الآن ، عيّن المعامل الاختياري reverse إلى True واحصل على sorted_nums2 .

كما هو موضح في خلية الكود أدناه ، sorted_nums2 عبارة عن قائمة جديدة بالعناصر مرتبة بترتيب تنازلي.

 sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]

# 3. في هذا المثال ، دعنا نعمل مع قائمة السلاسل.

كما هو الحال مع الأمثلة السابقة ، يؤدي استدعاء الدالة sorted() إلى إرجاع قائمة جديدة. ويتم فرز العناصر حسب الترتيب الأبجدي.

 fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

# 4. الآن ، دعنا نخصص الفرز باستخدام معلمة key الاختيارية. اضبط key على len . سيؤدي هذا إلى فرز القائمة بناءً على طول السلاسل.

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

تظهر السلسلة ذات أقصر طول أولاً في القائمة التي تم فرزها ، وتظهر السلسلة الأطول في نهاية القائمة التي تم فرزها.

 fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

في الإخراج أعلاه ، الكمثرى هي أقصر سلسلة ، والفراولة هي أطول سلسلة.

فرز Python () الطريقة مقابل الدالة Sorted ()

لقد تعلمت حتى الآن كيفية استخدام طريقة sort() بالإضافة إلى وظيفة sorted() . في هذا القسم ، دعنا نعدد الاختلافات بين هاتين الطريقتين.

طريقة Python .sort () دالة () مرتبة بيثون
يفرز القائمة في مكانها — يعدل القائمة الأصلية إرجاع قائمة مرتبة جديدة
يعمل فقط مع قوائم بايثون يعمل مع متكررات Python مثل القوائم والسلاسل والمجموعات الأخرى
نوع الإرجاع None إرجاع نسخة مرتبة من القابل للتكرار

تلخيص لما سبق

آمل أن تكون قد وجدت هذا البرنامج التعليمي لقوائم Python مفيدًا.

دعنا نلخص بسرعة ما غطينا.

  • استخدم القائمة .
  • استخدم (list، reverse = True | False، key = <func>) للحصول على نسخة مرتبة من القائمة.

الآن بعد أن تعلمت كيفية فرز قوائم بايثون ، تعرف على قائمة الفهم في بايثون. أو يمكنك أيضًا تعلم كيفية التعامل مع الملفات أو العمل مع ملفات JSON في Python.

يمكنك تجربة الأمثلة المذكورة أعلاه في مترجم Geekflare Online Python.