فرز القوائم في بايثون: دليل شامل لـ sort() و sorted()

1. ما هو فرز القوائم في بايثون؟

لماذا يُعد فرز القوائم مهمًا؟

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

توفر بايثون لفرز القوائم كلاً من الدالة sort() والتابع sorted(). من خلال الاستخدام الصحيح لهاتين الوظيفتين، يمكن معالجة البيانات بكفاءة.

2. فرز القوائم باستخدام الدالة sort() في بايثون

2.1 الاستخدام الأساسي للدالة sort()

تقوم الدالة sort() بفرز القائمة في مكانها، مما يعني أن القائمة الأصلية تتغير. يتميز هذا بكونه موفرًا للذاكرة، حيث لا يتطلب إنشاء قائمة جديدة. يوضح المثال التالي الفرز بترتيب تصاعدي:

numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # [1, 2, 5, 5, 6, 9]

2.2 كيفية الفرز بترتيب تنازلي

لفرز القائمة بترتيب تنازلي، استخدم المعامل reverse=True.

numbers = [5, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 5, 2, 1]

2.3 كفاءة الذاكرة وسيناريوهات الاستخدام

تكون الدالة sort() فعالة بشكل خاص عندما تريد توفير الذاكرة. نظرًا لأنها تعدّل القائمة الأصلية، فإنها توفر ميزة تقليل استهلاك الذاكرة عند الحاجة إلى معالجة كميات كبيرة من البيانات بكفاءة.

3. فرز القوائم باستخدام التابع sorted()

3.1 الاستخدام الأساسي للتابع sorted()

لا يغيّر التابع sorted() القائمة الأصلية، بل يعيد قائمة جديدة. وهذا مفيد عندما تحتاج إلى قائمة جديدة مرتبة مع الاحتفاظ بالقائمة الأصلية. في المثال التالي، يتم استخدام sorted() للفرز بترتيب تصاعدي:

numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 2, 5, 5, 6, 9]
print(numbers)  # [5, 2, 9, 1, 5, 6]  # القائمة الأصلية لا تتغير

3.2 الاختلاف مع الدالة sort()

يختلف التابع sorted() عن الدالة sort() في أنه ينشئ ويعيد قائمة جديدة. إذا كنت ترغب في الاحتفاظ بالقائمة الأصلية كما هي، أو إذا كنت بحاجة إلى الاحتفاظ بقوائم متعددة مرتبة بترتيبات مختلفة، فإن sorted() هو الخيار المناسب.

4. الفرز الشرطي باستخدام المعامل key

4.1 الفرز بشروط مخصصة

يمكن استخدام كل من sort() و sorted() للفرز بناءً على شروط معينة باستخدام المعامل key. على سبيل المثال، لفرز قائمة من السلاسل النصية حسب طولها، استخدم ما يلي:

words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=len)
print(words)  # ['date', 'apple', 'banana', 'cherry']

4.2 الفرز مع تجاهل حالة الأحرف

لفرز السلاسل النصية مع تجاهل حالة الأحرف (كبير أو صغير)، استخدم key=str.lower.

words = ['Apple', 'banana', 'Cherry', 'date']
sorted_words = sorted(words, key=str.lower)
print(sorted_words)  # ['Apple', 'banana', 'Cherry', 'date']

4.3 الفرز المتقدم باستخدام دالة Lambda

باستخدام دالة Lambda، يمكن إجراء فرز شرطي أكثر تعقيدًا. يوضح المثال التالي فرز قائمة من الـ tupples بناءً على العنصر الثاني:

pairs = [(1, 3), (2, 1), (3, 2)]
sorted_pairs = sorted(pairs, key=lambda pair: pair[1])
print(sorted_pairs)  # [(2, 1), (3, 2), (1, 3)]

 

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. الاختلافات في الأداء بين sort() و sorted()

5.1 مقارنة الأداء

يستخدم كل من sort() و sorted() خوارزمية Timsort، وهما سريعتان بشكل عام. ومع ذلك، تقوم الدالة sort() بفرز القائمة في مكانها، مما يقلل من استهلاك الذاكرة، ويوفر ميزة في الأداء خاصة مع مجموعات البيانات الكبيرة. من ناحية أخرى، ينشئ التابع sorted() قائمة جديدة، مما يستهلك المزيد من الذاكرة، ولكنه مفيد عندما تحتاج إلى الاحتفاظ بالقائمة الأصلية.

5.2 نقاط التمييز في الاستخدام

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

6. الأسئلة الشائعة

6.1 ما هو الاختلاف الرئيسي بين sort() و sorted()؟

تقوم الدالة sort() بتعديل القائمة في مكانها وتعيد None. بينما يعيد التابع sorted() قائمة جديدة، ولا تتغير القائمة الأصلية.

6.2 كيف يمكنني فرز قائمة بشروط معقدة في بايثون؟

يمكنك فرز قائمة بناءً على شروط معقدة عن طريق تمرير دالة Lambda أو دالة مخصصة أخرى إلى المعامل key.

6.3 ما هو الفرق بين الدالة reverse() والدالة sort(reverse=True)؟

تقوم الدالة reverse() ببساطة بعكس ترتيب القائمة ولا تقوم بالفرز. بينما تقوم الدالة sort(reverse=True) بفرز القائمة بترتيب تنازلي.

年収訴求