sorted() ودالة key
ترتيب الأعداد والسلاسل والصفوف
sorted() ودالة key درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
الفرز يحسم المسابقات
تصبح مسائل مسابقات كثيرة سهلة بمجرد ترتيب البيانات. أداتك الأولى هي sorted()، التي تعيد قائمة مرتبة جديدة. 🏆
تعيد sorted() نسخة
يترك استدعاء sorted(nums) القائمة الأصلية دون تغيير، ويمنحك قائمة مرتبة جديدة. وهذا مفيد عندما تظل بحاجة إلى المدخلات لاحقًا.
nums = [3, 1, 2]
print(sorted(nums)) # [1, 2, 3]
print(nums) # [3, 1, 2]تفرز list.sort() في مكانها
عندما لا تحتاج إلى الترتيب الأصلي، تفرز list.sort() القائمة في مكانها وتعيد None. وهذا يوفر الذاكرة في المصفوفات الكبيرة.
nums = [3, 1, 2]
nums.sort()
print(nums) # [1, 2, 3]الترتيب الافتراضي تصاعدي
ترتّب Python العناصر افتراضيًا من الأصغر إلى الأكبر. فتنتقل الأعداد من الأقل إلى الأعلى، وتأتي السلاسل النصية بترتيب القاموس، حرفًا بعد حرف.
print(sorted(["pear", "apple", "kiwi"]))
# ['apple', 'kiwi', 'pear']اعكسه باستخدام reverse
مرّر reverse=True للفرز من الأكبر إلى الأصغر. وهذا مثالي عندما تحتاج خطوة جشعة إلى العناصر الأكبر أولًا.
print(sorted([3, 1, 2], reverse=True))
# [3, 2, 1]تعرّف إلى الدالة key
تخبر الوسيطة key أداة الفرز بكيفية ترتيب كل عنصر. تستدعي Python الدالة key لكل عنصر، ثم ترتّب وفق القيم المعادة.
words = ["bb", "a", "ccc"]
print(sorted(words, key=len))
# ['a', 'bb', 'ccc']استخدم key مع lambda
تتيح لك lambda صغيرة الفرز وفق أي تعبير مباشرةً. وهنا نرتّب الأعداد بحسب بُعدها عن الصفر.
vals = [-5, 2, -1, 3]
print(sorted(vals, key=lambda x: abs(x)))
# [-1, 2, 3, -5]افرز الكائنات حسب حقل
مع الصفوف أو السجلات، وجّه key إلى الحقل المهم. وستبقى بقية مكونات العنصر معه تلقائيًا.
people = [("Ann", 30), ("Bob", 25)]
print(sorted(people, key=lambda p: p[1]))
# [('Bob', 25), ('Ann', 30)]الفرز مستقر
فرز Python مستقر: إذ تحافظ المفاتيح المتساوية على ترتيبها النسبي الأصلي. ويتيح لك ذلك إجراء فرزات متتالية لكسر التعادلات بأمان.
يتفوق key على المقارنة اليدوية
يُحسَب key مرة واحدة لكل عنصر، لذا يظل سريعًا مع المدخلات الكبيرة. استخدمه بدلًا من تبديل العناصر بنفسك.
كلفة الفرز O(n log n)
تفرز Python في زمن O(n log n). وبالنسبة إلى n التي تصل إلى بضع مئات الآلاف، يظل ذلك ضمن حد الثانية الواحدة بسهولة.
تحقق سريع
تحتاج إلى ترتيب القائمة، لكن يجب أن تبقي النسخة الأصلية كما هي.
مراجعة
يمكنك ترتيب البيانات باستخدام sorted() أو فرزها في مكانها، وعكس الترتيب باستخدام reverse، وترتيب أي شيء باستخدام key. ويحافظ الفرز المستقر على ترتيب العناصر المتعادلة. 🎉
الأسئلة الشائعة
هل درس «sorted() ودالة key» مجاني؟
نعم — نص درس «sorted() ودالة key» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.
ماذا ستتعلم في «sorted() ودالة key»؟
ترتيب الأعداد والسلاسل والصفوف تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟
لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «sorted() ودالة key»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟
نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- sorted() ودالة key
- الترتيب حسب حقول متعددة
- ترتيب مخصص باستخدام functools.cmp_to_key
- سبب أن الترتيب أولًا يفتح باب الحلول