تتوفر لغة Python على وسائل مختلفة لعكس السلاسل، ولكنها لا تحتوي على وظيفة مدمجة للقيام بذلك. فيما يلي بعض الطرق الشائعة لعكس سلسلة في Python.
1. كيفية عكس سلسلة في Python؟
بعض الطرق الشائعة لعكس سلسلة هي:
- استخدام التقسيم لإنشاء نسخة عكسية من السلسلة.
- استخدام حلقة for وإضافة الأحرف بترتيب عكسي
- استخدام حلقة while لتكرار أحرف السلسلة بترتيب عكسي وإلحاقها
- استخدام وظيفة الانضمام إلى السلسلة مع محدد reversed()
- إنشاء قائمة من السلسلة ثم استدعاء وظيفتها
reverse()
- استخدام الارتجاع
1.1) عكس سلسلة Python باستخدام التقسيم
def reverse_slicing(s):
return s[::-1]
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('Reverse String using slicing =', reverse_slicing(input_str))
إذا قمت بتشغيل البرنامج النصي Python أعلاه، سيكون الإخراج كالتالي:
Reverse String using slicing = FE∂çBA
1.2) عكس السلسلة باستخدام حلقة For
def reverse_for_loop(s):
s1 = ''
for c in s:
s1 = c + s1 # appending chars in reverse order
return s1
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('Reverse String using for loop =', reverse_for_loop(input_str))
الناتج: عكس السلسلة باستخدام حلقة for = FE∂çBA
1.3) عكس السلسلة باستخدام حلقة While
def reverse_while_loop(s):
s1 = ''
length = len(s) - 1
while length >= 0:
s1 = s1 + s[length]
length = length - 1
return s1
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('Reverse String using while loop =', reverse_while_loop(input_str))
1.4) عكس السلسلة باستخدام join() و reversed()
def reverse_join_reversed_iter(s):
s1 = ''.join(reversed(s))
return s1
1.5) عكس السلسلة في Python باستخدام reverse() للقائمة
def reverse_list(s):
temp_list = list(s)
temp_list.reverse()
return ''.join(temp_list)
1.6) عكس السلسلة في Python باستخدام التكرار
def reverse_recursion(s):
if len(s) == 0:
return s
else:
return reverse_recursion(s[1:]) + s[0]
2. أفضل طريقة لعكس سلسلة في Python
يمكننا عكس سلسلة من خلال عدة خوارزميات. لقد رأينا بالفعل ستة منها. ولكن أيًا منها يجب أن تختار لعكس سلسلة. يمكننا استخدام وحدة timeit لتشغيل عدة تكرارات من هذه الوظائف والحصول على المتوسط الزمني المطلوب لتشغيلها. تخزن جميع الوظائف أعلاه في نص برمجي Python يسمى string_reverse.py
. قمت بتنفيذ كل هذه الوظائف واحدة تلو الأخرى لمرة واحدة، لمدة 100000 مرة باستخدام وحدة timeit وحصلت على متوسط أفضل 5 تشغيلات.
$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_slicing("ABç∂EF"*10)'
100000 loops, best of 5: 0.449 usec per loop
$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_list("ABç∂EF"*10)'
100000 loops, best of 5: 2.46 usec per loop
$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_join_reversed_iter("ABç∂EF"*10)'
100000 loops, best of 5: 2.49 usec per loop
$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_for_loop("ABç∂EF"*10)'
100000 loops, best of 5: 5.5 usec per loop
$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_while_loop("ABç∂EF"*10)'
100000 loops, best of 5: 9.4 usec per loop
$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_recursion("ABç∂EF"*10)'
100000 loops, best of 5: 24.3 usec per loop
يقدم الجدول أدناه النتائج وبطء الخوارزمية من الأفضل.
Algorithm | TimeIt Execution Time (Best of 5) | Slowness |
---|---|---|
Slicing | 0.449 usec | 1x |
List reverse() | 2.46 usec | 5.48x |
reversed() + join() | 2.49 usec | 5.55x |
for loop | 5.5 usec | 12.25x |
while loop | 9.4 usec | 20.94x |
Recursion | 24.3 usec | 54.12x |
3. ملخص
يجب علينا استخدام الشطب لعكس سلسلة في Python. كوده بسيط جدًا وصغير الحجم ولا نحتاج إلى كتابة منطقنا الخاص لعكس السلسلة. كما أنه أسرع طريقة لعكس سلسلة كما تم التعرف عليه من خلال تنفيذات الاختبار أعلاه.
يمكنك مراجعة السكربت الكامل لـ Python ومزيد من أمثلة Python من مستودعنا على GitHub.
4. المراجع
Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string