اذهب إلى المحتوى

السؤال

نشر

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

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

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

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

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

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

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

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

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

Recommended Posts

  • 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

 

  • 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))

و ستحصل على نفس النتيجة أيضاً.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...