عكس السلسلة في Python – 5 طرق وأفضل واحدة

تتوفر لغة Python على وسائل مختلفة لعكس السلاسل، ولكنها لا تحتوي على وظيفة مدمجة للقيام بذلك. فيما يلي بعض الطرق الشائعة لعكس سلسلة في Python.

1. كيفية عكس سلسلة في Python؟

بعض الطرق الشائعة لعكس سلسلة هي:

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