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

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

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

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

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

لنبدأ!

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

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

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

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

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

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

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

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

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

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

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

# Output: [6, 9, 13, 17, 25]

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

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

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

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

# Output: [25, 17, 13, 9, 6]

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

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

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

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

def mod5(x):
  return x % 5 

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

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

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

# Output: [25, 6, 17, 13, 9]

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

لاحظ أنه بدلاً من الفرز العادي ، تقوم الآن بتخصيص الفرز وفقًا للمفتاح وهو 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 args: يعيد التعبير التعبير المحسوب على args.

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

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

# Output: [25, 6, 17, 13, 9]

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

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

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

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

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

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

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

students.sort()
print(students)

# Output
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

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

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

students.sort(reverse = True)
print(students)

# Output
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

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

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

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

تأمل القائمة التالية ، المنازل.

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

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

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

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

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

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

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

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

houses.sort(key=returnHouse)

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

print(houses)

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

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

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

houses.sort(key=lambda student:student["house"])
print(houses)

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

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

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

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

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

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

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

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

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

  • هو أي كائن قائمة Python صالح وهو معلمة مطلوبة.
  • عكس والمفتاح هي معلمات اختيارية

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

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

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

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

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

# Output: [6, 9, 13, 17, 25]

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

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

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

# 2. الآن ، عيّن المعامل الاختياري معكوسًا إلى 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. الآن ، دعنا نخصص الفرز باستخدام معلمة المفتاح الاختيارية. اضبط المفتاح على لين. سيؤدي هذا إلى فرز القائمة بناءً على طول السلاسل.

ملاحظة: في 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 ()

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

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

تلخيص 👩‍🏫

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

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

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

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

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

  تتمتع "OK Google" بمزيد من الأمان على الهواتف المقفلة