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

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

سعیده مهاجری

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

مرتب سازی در Python :

در Python می توانید لیستی را با استفاده از متد list.sort یا تابع مرتب سازی built-in مرتب کنید. تابع مرتب سازی ، یک لیست مرتب سازی جدید ایجاد می کند ، در حالی که متد list.sort لیست را مرتب می کند. لیست مرتب نشده از تابع مرتب شده استفاده می کند. تفاوت دیگر این است که تابع مرتب شده بر روی هر شی قابل تکرار کار می کند. نحوه مرتب سازی به شرح زیر است:

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

key و reverse به معنای زیر است:

  • key – تابعی که یک آرگومان می گیرد و قبل از مقایسه آن را تغییر می دهد. این تابع باید یک مقداری را که برای مقایسه مرتب سازی استفاده می شود ، برگرداند.
  • reverse – مقدار معکوس می تواند درست یا نادرست باشد. مقدار پیش فرض درست است. وقتی این استدلال روی 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']

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

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]

مثال دیگر استفاده از آرگومان key برای مرتب سازی یک لیست پیچیده است ، مانند لیست 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'}
]

یک روش بهتر و سریعتر برای مرتب سازی یک function پیچیده ، استفاده از توابع ماژول 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'}
]

جمع بندی :

ما به شما نشان دادیم که چگونه لیست ها را در Python با استفاده از روش مرتب سازی و تابع مرتب سازی مرتب کنید.

امیدواریم مطالب مورد پسند بوده باشد.

ما را در شتابان هاست همراهی کنید.

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