در این برنامه می خواهیم لیستی را در ورودی بگیریم و آن را بر اساس طول عناصر موجود در آن مرتب کنیم.
مثال ها:
ورودی: list = ["rohan", "amy", "sapna", "muhammad",
"aakash", "raunak", "chinmoy"]
خروجی: ['amy', 'rohan', 'sapna', 'aakash', 'raunak',
'chinmoy', 'muhammad']
ورودی: list = [["ram", "mohan", "aman"], ["gaurav"],
["amy", "sima", "ankita", "rinku"]]
خروجی: [['gaurav'], ['ram', 'mohan', 'aman'],
['amy', 'sima', 'ankita', 'rinku']]
نکته: مثال اول شامل رشته هایی است که طول آنها قابل محاسبه است. مثال دوم شامل لیستهای فرعی است که آنها نیز بر اساس طول کلمات مرتب شدهاند.
راه های زیادی برای انجام این کار وجود دارد. هر کسی میتواند از تکنیک الگوریتمی خود استفاده کند، اما پایتون توابع داخلی مختلفی را برای انجام این موارد در اختیار ما قرار میدهد. توابع داخلی شامل sort()
و sorted()
همراه با پارامتر کلید هستند. ما می توانیم این دو تابع را به دو صورت انجام دهیم. یک راه این است که لیست را با ایجاد یک لیست جدید مرتب کنید و راه دیگر مرتب سازی در لیست داده شده است که باعث صرفه جویی در فضا می شود.
نحوه مرتب سازی با ایجاد یک لیست جدید به شرح زیر است:
sorted_list = sorted(unsorted_list, key=len)
# مرتب سازی یک لیست با ساخت
# یک لیست دیگر در پایتون با استفاده از sorted()
def Sorting(lst):
lst2 = sorted(lst, key=len)
return lst2
lst = ["rohan", "amy", "sapna", "muhammad",
"aakash", "raunak", "chinmoy"]
print(Sorting(lst))
نحوه مرتب سازی بدون ایجاد لیست جدید به شرح زیر است:
unsorted_list.sort(key=len)
# مرتب سازی لیست بدون استفاده از
# یک لیست دیگر با استفاده از sort()
def Sorting(lst):
lst.sort(key=len)
return lst
lst = ["rohan", "amy", "sapna", "muhammad",
"aakash", "raunak", "chinmoy"]
print(Sorting(lst))
خروجی:
['amy', 'rohan', 'sapna', 'aakash', 'raunak', 'chinmoy', 'muhammad']
کارکرد این تابع:
این تابع کلیدی پایتون مراحل زیر را دنبال می کند:
- هر عنصر از لیست به طور موقت با یک نسخه “اصلاح شده” جایگزین می شود که شامل نتیجه عملکرد کلید اعمال شده روی عنصر است.
- فهرست بر اساس ترتیب طبیعی کلیدها مرتب شده است.
- عناصر تزئین شده با عناصر اصلی جایگزین می شوند.
کد مرتبسازی با ایجاد یک لیست ساختگی جدید:
import numpy
def Sorting(lst):
# لیستی برای ذخیره طول هر عنصر
lenlist=[]
for x in lst:
lenlist.append(len(x))
# ایجاد یک لیست از ایندکس های لیست مرتب شده قبل
sortedindex = numpy.argsort(lenlist)
# ایجاد یک لیست ساختگی که می خواهیم بعداً
#در آن کلمه را مطابق لیست sortedindex قرار دهیم
lst2 = ['dummy']*len(lst)
# print(sortedindex,lenlist)
for i in range(len(lst)):
# قرار دادن عنصر در لیست lst2 با گرفتن مقدار از لیست اصلی lst
#با استفاده از ایندکس آن در لیست مرتب شده
lst2[i] = lst[sortedindex[i]]
return lst2
lst = ["rohan", "amy", "sapna", "muhammad",
"aakash", "raunak", "chinmoy"]
print(Sorting(lst))
خروجی:
['amy', 'rohan', 'sapna', 'aakash', 'raunak', 'chinmoy', 'muhammad']
دیدگاهها