• 0

ترتيب قائمة بإستخدام طريقة Natural sort order في بايثون

كيفية ترتيب قائمة بإستخدام طريقة Natural sort order في بايثون؟

لدي قائمة بالشكل التالي:

['Item10', 'item2', 'Item9', 'item3']

وأريد أن أقوم بترتيب هذه القائمة بطريقة Natural sort order لتكون النتيجة كالتالي:

['item2', 'Item9', 'item10', 'Item11']

حاولت أن أستعمل الدالة sorted وكذلك التابع sort لكن كانت النتيجة كالتالي:

['Item10', 'Item9', 'item2', 'item3']

لاحظ الأرقام في كل عنصر وكذلك حرف i و I

كيف يمكنني أن أقوم بترتيب القائمة للحصول على النتيجة الأولى؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يمكننا استخدام المكتبة 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

يُمكنك إستخدام المكتبة التالية:  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 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن