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

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

Adam Ebrahim

السؤال

كيفية ترتيب قائمة بإستخدام طريقة 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...