הפוך מחרוזת ב-Python – 5 דרכים והטובה ביותר

מחרוזת Python אין לה פונקציה מובנית להיפוך (). אך, קיימות שיטות שונות להיפוך מחרוזת בפייתון.

1. כיצד להפוך מחרוזת בפייתון?

חלק מהדרכים הנפוצות להיפוך מחרוזת הם:

  • שימוש ב Slicing ליצירת עותק הפוך של המחרוזת.
  • שימוש בלולאת for והוספת תווים בסדר הפוך
  • שימוש בלולאת while לעבור על תווי המחרוזת בסדר הפוך ולהוסיף אותם
  • שימוש בפונקציית join() עם הפונקציה reversed() iterator
  • יצירת רשימה מהמחרוזת ואז לקרוא לפונקציית reverse() שלה
  • שימוש ברקורסיה

1.1) היפוך מחרוזת Python באמצעות Slicing

def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))

אם תריץ את סקריפט הפייתון שלמעלה, הפלט יהיה:

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) הפיכת מחרוזת בפייתון באמצעות reverse() של רשימה

def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)

1.6) הפיכת מחרוזת בפייתון באמצעות רקורסיה

def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]

2. הדרך הטובה ביותר להפוך מחרוזת ב-Python

ניתן להפוך מחרוזת באמצעות מספר אלגוריתמים. כבר ראינו שישה מהם. אך איזה מתוך כולם אתה צריך לבחור כדי להפוך מחרוזת? אפשר להשתמש ב־מודול timeit כדי להריץ מספר רב של חזרות של פונקציות אלו ולקבל את הזמן הממוצע הנדרש להם לרוץ. כל הפונקציות לעיל מאוחסנות בקובץ פייתון בשם string_reverse.py. ביצעתי את כל הפונקציות הללו אחת אחרי השני 100,000 פעמים באמצעות מודול 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. הקוד שלו פשוט מאוד וקטן ואנו לא צריכים לכתוב לוגיקה משלנו כדי להפוך את המחרוזת. גם זו הדרך המהירה ביותר להפוך מחרוזת, כפי שזוהה על ידי הרצות הבדיקה למעלה.

ניתן לבדוק את סקריפט הפייתון השלם ועוד דוגמאות בפייתון ממערכת הגיטהאב שלנו.

4. הפניות

Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string