مروری بر توابع sorted() و reversed() در پایتون

مروری بر توابع sorted() و reversed() در پایتون

در پایتون، مرتب‌سازی و معکوس‌سازی داده‌ها از عملیات رایج در برنامه‌نویسی هستند. پایتون ابزارهای قدرتمندی برای انجام این کارها فراهم می‌کند. دو تابع اصلی که برای این منظور استفاده می‌شوند، sorted() و reversed() هستند. این مقاله به بررسی عمیق این دو تابع، نحوه عملکرد آن‌ها، تفاوت‌های کلیدی و کاربردهای مختلف آن‌ها می‌پردازد. این آموزش در سطح ‘مفاهیم متوسط’ پایتون قرار می‌گیرد و فرض بر این است که خواننده با مفاهیم پایه پایتون مانند لیست‌ها، تاپل‌ها و توابع آشنایی دارد.

تابع sorted()

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

نحوه استفاده

ساده‌ترین حالت استفاده از sorted() به صورت زیر است:

my_list = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_list = sorted(my_list)
print(sorted_list)  # خروجی: [1, 1, 2, 3, 4, 5, 6, 9]
print(my_list)      # خروجی: [3, 1, 4, 1, 5, 9, 2, 6] (لیست اصلی بدون تغییر)

همانطور که مشاهده می‌کنید، sorted() یک لیست جدید به نام sorted_list ایجاد کرده است که شامل عناصر مرتب شده my_list است. لیست اصلی my_list بدون تغییر باقی مانده است.

پارامترهای کلیدی

تابع sorted() دو پارامتر کلیدی دارد:

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

استفاده از پارامتر key

پارامتر key به ما امکان می‌دهد مرتب‌سازی را بر اساس یک معیار خاص انجام دهیم. به عنوان مثال، فرض کنید یک لیست از دیکشنری‌ها داریم و می‌خواهیم آن‌ها را بر اساس مقدار یک کلید خاص مرتب کنیم:

my_list = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
sorted_list = sorted(my_list, key=lambda x: x['age'])
print(sorted_list)
# خروجی: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]

در این مثال، از یک تابع lambda برای استخراج مقدار کلید ‘age’ از هر دیکشنری استفاده کرده‌ایم. sorted() از این مقادیر برای مقایسه دیکشنری‌ها و مرتب‌سازی آن‌ها بر اساس سن استفاده می‌کند.

استفاده از پارامتر reverse

پارامتر reverse به ما امکان می‌دهد ترتیب مرتب‌سازی را تغییر دهیم. به عنوان مثال، برای مرتب‌سازی یک لیست به صورت نزولی:

my_list = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_list = sorted(my_list, reverse=True)
print(sorted_list)  # خروجی: [9, 6, 5, 4, 3, 2, 1, 1]

تابع reversed()

تابع reversed() یک تابع داخلی پایتون است که یک شی تکرارپذیر را به عنوان ورودی می‌گیرد و یک iterator معکوس شده را برمی‌گرداند. برخلاف sorted()، reversed() یک لیست جدید ایجاد نمی‌کند، بلکه یک iterator برمی‌گرداند که عناصر را به ترتیب معکوس ارائه می‌دهد. برای دریافت عناصر معکوس شده به صورت یک لیست، باید از تابع list() استفاده کنید.

نحوه استفاده

ساده‌ترین حالت استفاده از reversed() به صورت زیر است:

my_list = [1, 2, 3, 4, 5]
reversed_iterator = reversed(my_list)
reversed_list = list(reversed_iterator)
print(reversed_list)  # خروجی: [5, 4, 3, 2, 1]
print(my_list)      # خروجی: [1, 2, 3, 4, 5] (لیست اصلی بدون تغییر)

در این مثال، reversed() یک iterator به نام reversed_iterator ایجاد کرده است که عناصر my_list را به ترتیب معکوس ارائه می‌دهد. سپس از تابع list() برای تبدیل این iterator به یک لیست جدید به نام reversed_list استفاده کرده‌ایم.

تفاوت کلیدی با sorted()

تفاوت اصلی بین sorted() و reversed() در این است که sorted() یک لیست جدید مرتب شده را ایجاد می‌کند، در حالی که reversed() یک iterator معکوس شده را برمی‌گرداند. sorted() ترتیب عناصر را تغییر می‌دهد، در حالی که reversed() فقط ترتیب ارائه عناصر را تغییر می‌دهد. همچنین، sorted() می‌تواند با استفاده از پارامتر key مرتب‌سازی سفارشی را انجام دهد، در حالی که reversed() فقط ترتیب عناصر را معکوس می‌کند.

کاربردهای reversed()

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

مقایسه عملکرد

به طور کلی، reversed() سریع‌تر از sorted() است، زیرا فقط یک iterator ایجاد می‌کند و نیازی به ایجاد یک لیست جدید مرتب شده ندارد. با این حال، اگر نیاز به یک لیست مرتب شده دارید، sorted() گزینه مناسب‌تری است.

نتیجه‌گیری

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

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *