ترتيب القوائم في بايثون: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

طرق ترتيب القوائم في بايثون: دليل شامل

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

أساسيات العمل مع القوائم في بايثون

القوائم في بايثون هي مجموعات مرتبة وقابلة للتعديل من العناصر. تسمح لك بتخزين عناصر من أنواع بيانات مختلفة وتوفر وصولًا مريحًا إليها عبر الفهرس.

numbers = [5, 2, 9, 1, 5, 6]
words = ["banana", "apple", "cherry"]
mixed_list = [1, "hello", 3.14, True]

الطرق الأساسية لترتيب القوائم

توفر بايثون طريقتين رئيسيتين لترتيب القوائم: طريقة sort() ودالة sorted(). لكل منهما خصائصه ومجالات استخدامه.

طريقة sort() — الترتيب في المكان

طريقة sort() تقوم بتعديل القائمة الأصلية وتُرجع None. هذا الأسلوب فعال من حيث الذاكرة لأنه لا ينشئ قائمة جديدة.

numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers)  # [1, 2, 5, 9]
معاملات طريقة sort()

تقبل طريقة sort() المعاملات التالية:

  • reverse: يحدد اتجاه الترتيب (True للتنازلي، False للتصاعدي)
  • key: دالة تحدد معيار الترتيب
numbers = [5, 2, 9, 1]
numbers.sort(reverse=True)
print(numbers)  # [9, 5, 2, 1]

دالة sorted() — إنشاء قائمة جديدة

دالة sorted() تُرجع قائمة جديدة مرتبة دون تعديل القائمة الأصلية. هذا مفيد عندما تحتاج إلى الحفاظ على الترتيب الأصلي للعناصر.

numbers = [5, 2, 9, 1]
new_numbers = sorted(numbers)
print(new_numbers)  # [1, 2, 5, 9]
print(numbers)      # [5, 2, 9, 1] — القائمة الأصلية لم تتغير
الترتيب التنازلي باستخدام sorted()
numbers = [5, 2, 9, 1]
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc)  # [9, 5, 2, 1]

مقارنة طرق الترتيب

الطريقة تعديل القائمة القيمة المُرجعة الاستخدام
sort() نعم لا (None) عندما لا تحتاج للترتيب الأصلي
sorted() لا قائمة جديدة عندما تحتاج للحفاظ على البيانات الأصلية

ترتيب النصوص في القوائم

الترتيب الأبجدي

عند ترتيب النصوص، تستخدم بايثون الترتيب المعجمي (lexicographic) افتراضيًا:

words = ["banana", "apple", "cherry"]
words.sort()
print(words)  # ['apple', 'banana', 'cherry']

الترتيب التنازلي

words = ["banana", "apple", "cherry"]
words.sort(reverse=True)
print(words)  # ['cherry', 'banana', 'apple']

التعامل مع حالة الأحرف عند ترتيب النصوص

حساسية حالة الأحرف

افتراضيًا، يراعي الترتيب حالة الأحرف. الأحرف الكبيرة تأتي قبل الصغيرة في جدول ASCII:

words = ["Banana", "apple", "Cherry"]
print(sorted(words))  # ['Banana', 'Cherry', 'apple']

تجاهل حالة الأحرف

للترتيب دون مراعاة حالة الأحرف، استخدم المعامل key=str.lower:

words = ["Banana", "apple", "Cherry"]
print(sorted(words, key=str.lower))  # ['apple', 'Banana', 'Cherry']

ترتيب هياكل البيانات المعقدة

ترتيب قائمة من القوائم

لترتيب قائمة تحتوي على قوائم فرعية بناءً على عنصر معين، استخدم دوال lambda:

data = [[1, 'banana'], [3, 'apple'], [2, 'cherry']]
data.sort(key=lambda x: x[1])  # ترتيب حسب النص
print(data)  # [[3, 'apple'], [1, 'banana'], [2, 'cherry']]

ترتيب قائمة من القواميس

يمكنك ترتيب قائمة من القواميس بناءً على مفتاح معين:

students = [{'name': 'أحمد', 'grade': 85}, {'name': 'سارة', 'grade': 92}, {'name': 'خالد', 'grade': 78}]
sorted_students = sorted(students, key=lambda x: x['grade'], reverse=True)
print(sorted_students)  # [{'name': 'سارة', 'grade': 92}, {'name': 'أحمد', 'grade': 85}, {'name': 'خالد', 'grade': 78}]

استخدام دوال lambda في الترتيب

دوال lambda هي دوال صغيرة ومجهولة تُستخدم غالبًا كمعامل key في الترتيب. تسمح لك بتحديد معايير ترتيب مخصصة بسهولة.

# ترتيب حسب طول النص
words = ["banana", "apple", "cherry", "date"]
words.sort(key=lambda x: len(x))
print(words)  # ['date', 'apple', 'banana', 'cherry']

الترتيب المستقر (Stable Sort)

خوارزمية الترتيب في بايثون (Timsort) هي خوارزمية مستقرة، مما يعني أنها تحافظ على الترتيب النسبي للعناصر المتساوية. هذا مفيد عند تطبيق ترتيب متعدد المستويات.

# ترتيب حسب الحرف الأول أولاً، ثم حسب الطول
words = ["cat", "dog", "apple", "ant"]
words.sort(key=lambda x: len(x))  # ترتيب حسب الطول
words.sort(key=lambda x: x[0])    # ترتيب حسب الحرف الأول (مستقر)
print(words)  # ['ant', 'apple', 'cat', 'dog']

نصائح وحيل متقدمة

  • استخدم reverse=True للترتيب التنازلي بسرعة.
  • لترتيب عكسي بناءً على معيار معين، يمكنك استخدام سالب القيمة: key=lambda x: -x['grade'].
  • لترتيب متعدد المستويات، استخدم tuple كمعيار: key=lambda x: (x['last_name'], x['first_name']).
  • تذكر أن sort() تعدل القائمة الأصلية، بينما sorted() تُرجع قائمة جديدة.

الخلاصة

ترتيب القوائم في بايثون أداة قوية ومرنة. سواء كنت تستخدم sort() للترتيب في المكان أو sorted() لإنشاء قائمة جديدة، فإن فهم هذه الأدوات سيساعدك على كتابة كود أكثر كفاءة ووضوحًا. جرب الأمثلة بنفسك وابدأ في تطبيقها في مشاريعك!

المدونات

توصيات الكتب