در پایتون ، یک رشته دنباله ای از کاراکترهای Unicode است. اگرچه پایتون از توابع متعددی برای استفاده از رشته ، پشتیبانی می کند ، اما تابع یا روش داخلی ای ندارد که به طور صریح برای معکوس کردن یک رشته در پایتون طراحی شده باشد.
>> 'Linuxize'.reverse()
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'str' object has no attribute 'reverse'
معکوس کردن رشته ، یک برنامه رایج در برنامه نویسی نیست و عموماً در برنامه نویسی interviews استفاده می شود. در این مقاله با ما همراه باشید تا شما عزیزان را با چندین روش مختلف برای معکوس کردن یک رشته در پایتون آشنا کنیم.
استفاده از Slicing :
درک نحوه عملکرد نمایه سازی در پایتون برای انجام عملیات String Slice بسیار مهم است. به طور کلی ، شماره های دایرکتوری برای دسترسی به کاراکترهای خاص در یک رشته استفاده می شود. دو نوع نمایه سازی مثبت و منفی وجود دارد.
شما می توانید به کاراکتر n ، یا از طریق شماره شاخص مثبت ۲ یا از طریق شماره شاخص منفی ۶ دسترسی داشته باشید:
>> print('Linuxize'[2])
n
>> print('Linuxize'[-6])
n
ما می توانیم طیف وسیعی از کاراکترهای یک رشته را با استفاده از روش slicing فراخوانی کنیم. slicing عملیاتی است که دنباله یک زیر رشته را از رشته داده شده اکسترکت می کند.
نحو slicing :
string[start:stop:step]
- اولین آرگومان ، شاخصی را که اکسترکت در آن آغاز می شود ، مشخص می کند. هنگامی که از شاخص منفی استفاده می شود ، نشان دهنده یک جابجایی از انتهای رشته است. اگر این استدلال حذف شود ، slicing از دایرکتوری ۰ شروع می شود.
- آرگومان دوم نمایه ای را مشخص می کند که قبل از آن باید اکسترکت پایان یابد. هنگامی که از شاخص منفی استفاده می شود ، نشان دهنده یک جابجایی از انتهای رشته است. اگر این استدلال حذف یا بیشتر از طول رشته باشد ، slicing به انتهای رشته می رود.
- آرگومان سوم اختیاری است و مرحله slicing را مشخص می کند. هنگامی که آرگومان step استفاده نمی شود ، به طور پیش فرض روی ۱ قرار می گیرد. وقتی از مقدار منفی استفاده می شود ، slicing عناصر را به ترتیب معکوس می گیرد.
نتیجه slicing یک رشته جدید حاوی عناصر اکسترکت شده است ، و رشته اصلی اصلاح نشده است. برای معکوس کردن یک رشته در پایتون با استفاده از slicing ، آرگومان های شروع و توقف را حذف کرده و از مرحله منفی ۱ استفاده کنید. افزایش مرحله منفی ۱ بدین معنی است که slicing از آخرین عنصر شروع شده و در اولین عنصر به پایان می رسد و در نتیجه یک رشته معکوس ایجاد می شود.
>> print('Linuxize'[::-1])
ezixuniL
همچنین می توانید یک تابع سفارشی تعریف کرده و از آن برای معکوس کردن رشته ها استفاده کنید:
def rev_str_thru_slicing(str_):
return str_[::-1]
INPUT_STRING = "Linuxize"
if __name__ == '__main__':
print("INPUT STRING -", INPUT_STRING)
print("REVERSED STRING -", rev_str_thru_slicing(INPUT_STRING))
Input String - Linuxize
Reversed String using Slicing - ezixuniL
استفاده از تابع معکوس () :
تابع معکوس () رشته را به ترتیب معکوس می کند و یک اشاره گر معکوس را برمی گرداند. در مثال زیر ، elements اشاره گر معکوس با استفاده از عملگر join () به یک رشته خالی اضافه می شوند:
def rev_str_thru_join_revd(STR):
return "".join(reversed(STR))
INPUT_STRING = "Linuxize"
if __name__ == '__main__':
print("INPUT STRING -", INPUT_STRING)
print("RESERVED STRING THROUGH JOIN & REVERSED", rev_str_thru_join_revd(INPUT_STRING))
Input String - Linuxize
Reserved String Through Join & Reserved Methods - ezixuniL
استفاده از لیست معکوس () :
برای معکوس کردن یک رشته در پایتون با روش list reverse () ، ابتدا باید رشته را با استفاده از سازنده لیست ، به لیست تبدیل کرد. سپس آیتم های لیست با روش reverse () برعکس می شوند و در نهایت ، آیتم های لیست با استفاده از متد () join به یک رشته متصل می شوند. به عنوان مثال:
def rev_str_thru_list_reverse(STR):
lst = list(STR)
lst.reverse()
return(''.join(lst))
INPUT_STRING = "Linuxize"
if __name__ == '__main__':
print("Input String -", INPUT_STRING)
print("Reserved String Through List", rev_str_thru_list_reverse(INPUT_STRING))
Input String - Linuxize
Reserved String Through List Reverse Method - ezixuniL
استفاده از تابع بازگشتی :
در پایتون ، یک تابع بازگشتی تابعی است که تا زمانی که شرطی برآورده نشود ، خود را فرا می خواند. در قطعه کد زیر ، تابع rev_str_thru_recursion خود را فرا می خواند تا طول رشته از صفر بیشتر شود. در هر فراخوانی ، رشته sliced می شود و فقط اولین کاراکتر باقی می ماند. بعداً ، با sliced characters ترکیب می شود:
def rev_str_thru_recursion(STR):
if len(STR) == 0:
return STR
else:
return rev_str_thru_recursion(STR[1:]) + STR[0]
INPUT_STRING = "Linuxize"
if __name__ == '__main__':
print("INPUT STRING -", INPUT_STRING)
print("RESERVED STRING THROUGH RECURSION", rev_str_thru_recursion(INPUT_STRING))
تجزیه و تحلیل نسبی :
در این بخش ، ما یک مقایسه ساده بین این چهار روش تعریف شده انجام می دهیم تا کارایی آنها مشخص شود. ما عملکرد را با استفاده از یک ماژول پایتون به نام “timeit” تجزیه و تحلیل می کنیم.
Comparison Ratio Calc | Execution Time | Methods |
---|---|---|
۱x | ۰٫۲۳ | Slicing |
۷x | ۱٫۶۳ | List Reverse |
۷٫۵x | ۱٫۷۳ | Join & Reserved |
۸۳x | ۱۹٫۱۹ | Recursion |
جدول بالا نشان می دهد که Slicing هفت برابر سریعتر از لیست معکوس است ، لیست معکوس ۷٫۵ برابر سریعتر از Join & Reserved است و Join & Reserved هشتاد و سه برابر سریعتر از روش بازگشتی است. بنابراین Slicing سریعترین و بهترین راه برای معکوس کردن یک رشته در پایتون است.
جمع بندی :
پایتون هیچ عملکرد داخلی برای معکوس کردن رشته ندارد ، اما می توانیم از روش های دیگر برای معکوس کردن یک رشته در پایتون استفاده کنیم. تجزیه و تحلیل نسبی نشان داد که روش Slicing سریعترین راه برای معکوس کردن یک رشته است.
امیدواریم مطالب مورد پسند بوده و از آن بهره لازم را برده باشید. خوشحال میشویم نظرات و سوالات خود را در قسمت دیدگاه به اشتراک بگذارید و ما را در شتابان هاست همراهی کنید.😊