آموزش پایتون - مرتب‌سازی لیست‌ها

مرتب‌سازی لیست‌ها در پایتون

مرتب‌سازی یک لیست در پایتون، راهی برای چیدن عناصر لیست به صورت صعودی یا نزولی بر اساس یک معیار مشخص، مانند ترتیب عددی یا الفبایی (قاموسی) است.

این کار را می‌توان با استفاده از تابع داخلی ()sorted یا فراخوانی متد ()sort روی خود لیست انجام داد؛ هر دو متد با توجه به روش مورد استفاده، لیست اصلی را تغییر می‌دهند یا یک لیست مرتب‌شده جدید برمی‌گردانند.

مرتب‌سازی لیست‌ها با استفاده از متد ()sort

متد ()sort در پایتون برای مرتب‌سازی عناصر یک لیست در همان محل (in place) استفاده می‌شود. این بدان معناست که این متد لیست اصلی را تغییر می‌دهد و لیست جدیدی برنمی‌گرداند.

سنتکس (Syntax)

سنتکس استفاده از متد ()sort به صورت زیر است −

list_name.sort(key=None, reverse=False)

که در آن،

  • list_name نام لیستی است که قرار است مرتب شود.
  • key (اختیاری) تابعی است که معیار مرتب‌سازی را تعریف می‌کند. در صورت ارائه، روی تک‌تک عناصر لیست برای مرتب‌سازی اعمال می‌شود. مقدار پیش‌فرض None است.
  • reverse (اختیاری) یک مقدار بولین (Boolean) است. اگر True باشد، لیست به صورت نزولی مرتب می‌شود. اگر False باشد (پیش‌فرض)، لیست به صورت صعودی مرتب خواهد شد.

مثال مرتب‌سازی لیست به ترتیب الفبایی (قاموسی)

در مثال زیر، از تابع ()sort برای مرتب‌سازی آیتم‌های لیست به صورت الفبایی-عددی استفاده می‌کنیم −

list1 = ['physics', 'Biology', 'chemistry', 'maths']
print ("list before sort:", list1)
list1.sort()
print ("list after sort : ", list1)

خروجی زیر تولید خواهد شد −

list before sort: ['physics', 'Biology', 'chemistry', 'maths']
list after sort :  ['Biology', 'chemistry', 'maths', 'physics']

مثال مرتب‌سازی لیست به ترتیب عددی

در این قسمت، از تابع ()sort برای مرتب‌سازی لیست داده‌شده به ترتیب عددی استفاده می‌کنیم −

list2 = [10,16, 9, 24, 5]
print ("list before sort", list2)
list2.sort()
print ("list after sort : ", list2)

خروجی تولیدشده به صورت زیر است −

list before sort [10, 16, 9, 24, 5]
list after sort :  [5, 9, 10, 16, 24]

مرتب‌سازی لیست‌ها با استفاده از تابع ()sorted

تابع ()sorted در پایتون یک تابع داخلی است که برای مرتب‌سازی عناصر یک شیء قابل پیمایش (مانند لیست، تاپل یا رشته) استفاده می‌شود و یک لیست مرتب‌شده جدید برمی‌گرداند، در حالی که شیء قابل پیمایش اصلی را بدون تغییر باقی می‌گذارد.

سنتکس (Syntax)

سنتکس استفاده از تابع ()sorted به صورت زیر است −

sorted(iterable, key=None, reverse=False)

که در آن،

  • iterable شیء قابل پیمایشی است (مانند لیست، تاپل، رشته) که قرار است عناصر آن مرتب شوند.
  • key (اختیاری) تابعی است که معیار مرتب‌سازی را تعریف می‌کند. در صورت ارائه، روی تک‌تک عناصر شیء قابل پیمایش برای مرتب‌سازی اعمال می‌شود. مقدار پیش‌فرض None است.
  • reverse (اختیاری) یک مقدار بولین است. اگر True باشد، شیء قابل پیمایش به صورت نزولی مرتب می‌شود. اگر False باشد (پیش‌فرض)، به صورت صعودی مرتب خواهد شد.

مثال

در مثال زیر، از تابع ()sorted برای مرتب‌سازی یک لیست از اعداد و دریافت یک لیست مرتب‌شده جدید استفاده می‌کنیم −

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# Sorting in descending order
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) 

خروجی کد بالا به صورت زیر است −

[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

مرتب‌سازی آیتم‌های لیست با تابع کالبک (Callback Function)

در پایتون، تابع کالبک به تابعی گفته می‌شود که به عنوان آرگومان به تابع دیگری پاس داده می‌شود و در داخل آن تابع فراخوانی می‌گردد.

ما می‌توانیم آیتم‌های لیست را با یک تابع کالبک با استفاده از تابع ()sorted یا تابع ()sort در پایتون مرتب کنیم. هر دو تابع به ما این امکان را می‌دهند که با استفاده از پارامتر "key" که یک تابع کالبک را می‌پذیرد، یک معیار مرتب‌سازی سفارشی مشخص کنیم. این تابع کالبک نحوه مقایسه و مرتب‌سازی عناصر را تعریف می‌کند.

مثال استفاده از ()str.lower به عنوان پارامتر key

متد ()str.lower در پایتون برای تبدیل تمام کاراکترهای یک رشته به حروف کوچک استفاده می‌شود. این متد رشته جدیدی برمی‌گرداند که تمام کاراکترهای الفبایی آن به حروف کوچک تبدیل شده‌اند، در حالی که کاراکترهای غیرالفبایی بدون تغییر باقی می‌مانند.

در این مثال، متد ()str.lower را به عنوان آرگومان به پارامتر "key" در داخل تابع ()sort پاس می‌دهیم −

list1 = ['Physics', 'biology', 'Biomechanics', 'psychology']
print ("list before sort", list1)
list1.sort(key=str.lower)
print ("list after sort : ", list1)

خروجی زیر را تولید خواهد کرد −

list before sort ['Physics', 'biology', 'Biomechanics', 'psychology']
list after sort : ['biology', 'Biomechanics', 'Physics', 'psychology']

مثال استفاده از تابع تعریف‌شده توسط کاربر به عنوان پارامتر key

ما همچنین می‌توانیم از یک تابع تعریف‌شده توسط کاربر به عنوان پارامتر key در متد ()sort استفاده کنیم.

در این مثال، تابع ()myfunction از اپراتور % برای بازگرداندن باقیمانده استفاده می‌کند که مرتب‌سازی بر اساس آن انجام می‌شود −

def myfunction(x):
   return x%10
list1 = [17, 23, 46, 51, 90]
print ("list before sort", list1)
list1.sort(key=myfunction)
print ("list after sort : ", list1)

خروجی زیر را تولید خواهد کرد −

list before sort [17, 23, 46, 51, 90]
list after sort: [90, 51, 23, 46, 17]

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.