تابع sorted در پایتون برای مرتب سازی لیست، تاپل و دیکشنری ها استفاده می شود. همچنین هر متغیری از نوع لیست دارای متد sort است که لیست را به صورت درجا (In-Place) مرتب می کند. ساده ترین حالت استفاده از متد sort به صورت قطعه کد ۱ است. این متد می تواند هیچ ارگومانی دریافت نکند و لیست را به صورت صعودی و درجا مرتب کند. متد هیچ مقدار جدیدی بر نمی گرداند بلکه خود لیست را مرتب می کند.

متد sort به صورت پیش فرض لیست را به صورت صعودی مرتب می کند ولی می توان از آرگومان reverse با مقدار True برای مرتب سازی نزولی استفاده کرد.

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

تابع sorted نیز به طور مرتب به صورت صعودی مرتب سازی می کند ولی می توان از آرگومان reverse با مقدار True برای مرتب سازی به صورت نزولی نیز استفاده کرد.

مرتب سازی لیستی از لیست ها

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

برای اینکه بتوانیم مرتب سازی لیست ها را بر اساس یک اندیس مشخص (مانند دومین یا سومین آیتم در تمامی لیست ها) مرتب سازی را انجام دهیم، باید مانند قطعه کد ۶ مقدار آرگومان key مربوط به متد sort را با یک تابع lambda مقداردهی کنیم. به طور مثال می خواهیم تمامی لیست های درونی بر اساس دومین آیتم مرتب سازی شوند.

برای درک بهتر لطفا خروجی کدهای ۵ و ۶ را با هم مقایسه کنید. در قطعه کد ۶ اندیس ۱ معادل دومین ایتم است و اندیس صفر معادل اولین آیتم است. بنابراین قطعه کد ۵ را که به صورت پیشفرض بر اساس اولین آیتم مرتب سازی اتجام می شد را می توان به صورت زیر بازنویسی کرد.

قطعه کد ۸ مثال دیگری را نشان می دهد که یک لیست شامل سه زیر لیست است که هر لیست درونی از سه آیتم که شامل عدد و رشته است، تشکیل شده است.

اما اجرای قطعه کد ۸ باعث خطای زیر می شود و دلیل آن این است که نمی توان عملگر > را میان نوع رشته (str) و عدد صحیح (int) انجام داد. برای رفع مشکل باید توسط تابع str تمامی اعداد را به رشته تبدیل کرد.

مرتب سازی رشته ها نیز بر اساس عدد اسکی مختص به اولین کاراکتر آنها انجام می شود. برای بدست آوردن عدد اسکی هر کاراکتر می توانید از تابع ord استفاده کنید. این تابع یک کاراکتر را به عنوان ورودی می گیرد و عدد اسکی آنرا نمایش می دهد. بنابراین مشکل قطعه کد ۹ در این بود که آیتم های عددی و رشته درون هر زیر لیست محل های مختلفی داشتند ولی اگر به طور مثال در تمامی زیر لیست ها، آیتم های رشته در ابتدا و آیتم های بعدی عدد بودند، نیازی به استفاده از تابع str نبود.

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

چون نوع تاپل فاقد متد sort است، پس باید از تابع درونی sorted برای مرتب سازی تاپلی که شامل تاپل های درونی است، استفاده کرد. نحوه عملکرد دقیقا مانند لیستی از لیست ها است، یعنی باید از آرگومان key تابع sorted استفاده کنیم.