Adam Ebrahim نشر 28 مايو 2021 أرسل تقرير نشر 28 مايو 2021 كيفية ترتيب قائمة بإستخدام طريقة Natural sort order في بايثون؟ لدي قائمة بالشكل التالي: ['Item10', 'item2', 'Item9', 'item3'] وأريد أن أقوم بترتيب هذه القائمة بطريقة Natural sort order لتكون النتيجة كالتالي: ['item2', 'Item9', 'item10', 'Item11'] حاولت أن أستعمل الدالة sorted وكذلك التابع sort لكن كانت النتيجة كالتالي: ['Item10', 'Item9', 'item2', 'item3'] لاحظ الأرقام في كل عنصر وكذلك حرف i و I كيف يمكنني أن أقوم بترتيب القائمة للحصول على النتيجة الأولى؟ اقتباس
1 Wael Aljamal نشر 28 مايو 2021 أرسل تقرير نشر 28 مايو 2021 يمكننا استخدام المكتبة natsort المطلوبة فهي تقوم باستخدام الفرز الطبيعي لترتيب العناصر. # تضمين المكتة from natsort import natsorted, ns # تعريف المصفوفة x = ['Item10', 'item2', 'Item9', 'item3'] # استدعاء الدالة x = natsorted(x, key=lambda k: k.lower()) #1 # طباعة النتيجة print(x) # ['item2', 'item3', 'Item9', 'Item10'] ######################################### natsorted(x, alg=ns.IGNORECASE) #2 إما نقوم بتحويل جميع الحروف للشكل الصغير lower case أو نمرر وسيط لتجاهل حالة الأحرف: ربما تحتاج لتثبيت المكتبة: pip install natsort 2 اقتباس
0 سمير عبود نشر 28 مايو 2021 أرسل تقرير نشر 28 مايو 2021 يُمكنك إستخدام المكتبة التالية: natsort فبعد تثبيتها يُمكنك إستخدامها بالشكل التالي: from natsort import os_sorted x = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9'] print(os_sorted(x)) و الخرج سيكون كالتالي: ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13'] كما أنه بإمكانك إنشاء دالة تقوم بما تريد بإستعمال التعابير النمطية و دوال lambda كالتالي: import re def natural_sort(l): convert = lambda text: int(text) if text.isdigit() else text.lower() alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] return sorted(l, key = alphanum_key) x = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9'] print(natural_sort(x)) و ستحصل على نفس النتيجة أيضاً. 2 اقتباس
السؤال
Adam Ebrahim
كيفية ترتيب قائمة بإستخدام طريقة Natural sort order في بايثون؟
لدي قائمة بالشكل التالي:
وأريد أن أقوم بترتيب هذه القائمة بطريقة Natural sort order لتكون النتيجة كالتالي:
حاولت أن أستعمل الدالة sorted وكذلك التابع sort لكن كانت النتيجة كالتالي:
لاحظ الأرقام في كل عنصر وكذلك حرف i و I
كيف يمكنني أن أقوم بترتيب القائمة للحصول على النتيجة الأولى؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.