نحوه مرتب سازی لیست در Python

نحوه مرتب سازی لیست در Python

سعیده مهاجری

مرتب سازی داده ها یکی از رایج ترین کارها هنگام کار با پایتون است. برای مثال، ممکن است بخواهید لیستی از اعضای تیم را بر اساس نام یا لیستی از پروژه ها را به ترتیب اولویت مرتب کنید. در این مقاله با ما همراه باشید تا شما عزیزان را با نحوه مرتب سازی لیست در Python آشنا کنیم.

مرتب سازی پایتون با استفاده از ()sorted و ()list.sort :

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

list.sort(key=function, reverse=Boolean)
sorted(iterable, key=function, reverse=Boolean)

کلمه کلیدی اختیاری آرگومان key و reverse به معنای زیر است:

  • key – تابعی که یک آرگومان را می گیرد و قبل از مقایسه آن را تبدیل می کند. تابع باید یک مقدار را که برای مقایسه مرتب سازی استفاده می شود، برگرداند.
  • reverse – مقدار معکوس می تواند True یا False باشد. مقدار پیش فرض True است. وقتی این آرگومان روی false تنظیم شود، لیست به صورت معکوس، مرتب می شود.

عناصر لیست با استفاده از عملگر “less than” (<) مقایسه شده و به ترتیب صعودی مرتب می شوند. عملگر < از مقایسه رشته با عدد صحیح پشتیبانی نمی کند، بنابراین اگر لیستی حاوی رشته ها و اعداد صحیح دارید، عملیات مرتب سازی ناموفق خواهد بود. مثال زیر نحوه مرتب سازی لیست رشته ها را به ترتیب حروف الفبا نشان می دهد:

directions = ["north", "east", "south", "west"] 

directions.sort()

print('Sorted list:', directions)
Sorted list: ['east', 'north', 'south', 'west']

اگر می خواهید لیست اصلی را بدون تغییر نگه دارید، از تابع ()sorted استفاده کنید:

directions = ["north", "east", "south", "west"] 

sorted_directions = sorted(directions)

print('Sorted list:', sorted_directions)
Sorted list: ['east', 'north', 'south', 'west']

برای مرتب کردن لیست به ترتیب نزولی، آرگومان reverse را روی True تنظیم کنید:

directions = ["north", "east", "south", "west"] 

directions.sort(reverse=True)

print('Sorted list:', directions)
Sorted list: ['west', 'south', 'north', 'east']

مرتب سازی با Function :

آرگومان key یک تابع را می پذیرد و به شما امکان می دهد عملیات مرتب سازی پیچیده تری را انجام دهید. ساده ترین مثال این است که عناصر را بر اساس طول آنها مرتب کنید:

 

directions = ["Arya", "Daenerys", "Jon", "Brienne"] 

directions.sort(key=len)

print('Sorted list:', directions)

برای بازگرداندن تعداد کاراکترهای رشته که از آن به عنوان مقایسه کننده استفاده می شود ، از تابع ()len استفاده کنید:

Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']

همچنین می توانید یک تابع سفارشی ایجاد کنید و از آن به عنوان یک آرگومان کلیدی برای مقایسه استفاده کنید. در اینجا یک مثال نشان می دهد که چگونه لیستی از اعداد صحیح را بر اساس مجموع ارقام آنها مرتب کنید:

def sum_digits(num): 
    digits = [int(x) for x in str(num)] 
    return sum(digits) 

numbers = [23, 77, 19, 310, 219] 

numbers.sort(reverse=True, key=sum_digits)

print('Sorted list:', numbers)
Sorted list: [77, 219, 19, 23, 310]

مثال دیگر استفاده از آرگومان کلیدی برای مرتب کردن یک لیست پیچیده است، مانند لیست tuples:

numbers = [(3, 14), (1, 61), (2, 71)]

numbers.sort(key=lambda k: k[0])

print('Sorted list:', numbers)

از یک تابع ناشناس (lambda) استفاده کنید که اولین عنصر tuple را برمی گرداند. لیست بر اساس مقدار بازگشتی از تابع مرتب شده است:

Sorted list: [(1, 61), (2, 71), (3, 14)]

از همین رویکرد می توان برای مرتب کردن لیستی از فرهنگ لغت استفاده کرد:

elements = [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
]

elements.sort(key=lambda k: k['name'])

print('Sorted list:', elements)

تابع lambda مقدار name key را برمی‌گرداند که برای مقایسه استفاده می‌شود:

Sorted list: [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, 
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, 
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'}
]

یک راه بهتر و سریع‌تر برای مرتب‌سازی یک تابع پیچیده، استفاده از توابع ماژول Operator است. به عنوان مثال:

from operator import itemgetter

elements = [
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
]

elements.sort(key=itemgetter('symbol'))

print('Sorted list:', elements)

تابع Itemgetter مقدار نماد key را به دست می آورد:

Sorted list: [
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}
]

جمع بندی :

ما به شما نشان دادیم که چگونه لیست ها را در پایتون با استفاده از متد ()sort و تابع ()sorted مرتب کنید.

امیدواریم مطالب مورد پسند بوده و از آن بهره لازم را برده باشید. خوشحال میشویم نظرات و سوالات خود را در قسمت دیدگاه به اشتراک بگذارید و ما را در شتابان هاست همراهی کنید.😊

برچسب ها: دستورات لینوکس

  • محمدعلی مهدیزاده گفت:

    امکانش هست بیشتر در مورد key توضیح بدید ؟ برام سوال است که چرا نمیتوانیم فانکشنی که برای مرتب سازی تعریف کرده ایم را به تنهایی به متد sort بدهیم؟

  • ارسال دیدگاه جدید