Python ไม่มีฟังก์ชันสำเร็จรูปสำหรับกลับลำดับ String ดังนั้นเราต้องเขียนตรรกะเอง
เราจะกลับลำดับ String ด้วยวิธีต่างๆ
การใช้ FOR Loop
แนวคิดคือใช้ลูปย้อนกลับ (reverse loop) เริ่มจากดัชนีสุดท้ายของ String ไปถึงดัชนี 0 ในแต่ละรอบ เราจะนำตัวอักษรไปต่อท้าย String ใหม่เพื่อให้ได้ String ที่กลับลำดับแล้ว
ขั้นตอนทั่วไป:
a := String ใหม่ (ว่าง)
ลูปจากดัชนีสุดท้ายของ String ถึง 0 ลดทีละ 1: a = a + ตัวอักษรที่ดัชนีปัจจุบัน
คืนค่า a
ตัวอย่าง
def reverse(s):
a = ""
last_index = len(s) - 1
for i in range(last_index, -1, -1):
a = a + s[i]
return a
string = "TutorialsPoint"
print(reverse(string))
ผลลัพธ์
INPUT : TutorialsPoint
OUTPUT : tnioPslairotuT
การเขียนที่ฉลาดกว่าของวิธีข้างต้น:
ที่นี่เราใช้ for-each loop และนำตัวอักษรแต่ละตัวไปต่อที่หน้าของ String ใหม่ การต่อท้ายหน้าของ String ใหม่จะให้ String ที่กลับลำดับแล้ว แทน for-each loop เราสามารถใช้ลูปปกติจากดัชนี 0 ถึงความยาวของ String ได้
ตัวอย่าง
def reverse(s):
a = ""
for i in s:
a = i + a
return a
string = "TutorialsPoint"
print(reverse(string))
ผลลัพธ์
INPUT : TutorialsPoint
OUTPUT : tnioPslairotuT
การใช้ While Loop
เราสามารถแทน for loop ด้วย while loop เราจะวนลูป while จากดัชนีสุดท้ายถึง 0 และต่อตัวอักษรที่ดัชนีปัจจุบันไปท้าย String ใหม่เพื่อให้ได้ String ที่กลับลำดับแล้ว
ตัวอย่าง
def reverse(s):
a = ""
i = len(s) - 1
while i >= 0:
a = a + s[i]
i -= 1
return a
string = "TutorialsPoint"
print(reverse(string))
ผลลัพธ์
INPUT : TutorialsPoint
OUTPUT : tnioPslairotuT
การใช้ Extended Slice Syntax
Extended slice syntax มี 3 พารามิเตอร์ [start, end, step] การไม่ระบุ start และ end หมายถึงเริ่มต้นที่ 0 และสิ้นสุดที่ความยาวของ String การระบุ step เป็น '-1' หมายถึงเริ่มจากท้ายและหยุดที่หน้า ดังนั้นจึงได้ String ที่กลับลำดับแล้ว
ตัวอย่าง
def reverse(s):
a = s[::-1]
return a
string = "TutorialsPoint"
print(reverse(string))
# Using join and reversed()
ผลลัพธ์
INPUT : TutorialsPoint
OUTPUT : tnioPslairotuT
เราสามารถกลับลำดับได้ด้วย reversed() แต่ reversed() คืนค่าเป็น reversed iterator ดังนั้นเราต้อง join ตัวอักษรของ iterator นั้นเพื่อให้ได้ String
การใช้ join และ reversed()
ตัวอย่าง
def reverse(s):
a = "".join(reversed(s))
return a
string = "TutorialsPoint"
print(reverse(string))
ผลลัพธ์
INPUT : TutorialsPoint
OUTPUT : tnioPslairotuT
การใช้ Recursion (ฟังก์ชันเรียกตัวเอง)
เราสามารถกลับลำดับ String ด้วย Recursion เราจะเรียกฟังก์ชัน reverse ซ้ำโดยส่ง String ตั้งแต่ดัชนี 1 ถึงท้าย ดังนั้นความยาวของ String จะลดลงเรื่อยๆ จนถึง 0 ซึ่งเป็น Base case ที่คืนค่า String ในแต่ละการเรียกซ้ำ เราจะ slice String จากดัชนี 1 ถึงท้าย และต่อตัวอักษรแรกไปท้ายของ String ที่ slice แล้ว
ตัวอย่าง
def reverse(s):
if len(s) == 0:
return s
else:
return reverse(s[1:]) + s[0]
string = "TutorialsPoint"
print(reverse(string))
ผลลัพธ์
INPUT : TutorialsPoint
OUTPUT : tnioPslairotuT
นี่คือวิธีการบางส่วนในการกลับลำดับ String ใน Python เราได้พูดถึง 5 วิธีที่แตกต่างกัน
วิธีไหนเร็วและดีที่สุด?
วิธีที่เร็วและดีที่สุดคือการใช้ Slicing (วิธีที่ 3) ให้ผลลัพธ์เร็วที่สุดในทุกวิธี การใช้งานง่ายมาก เพียง 1 บรรทัดของโค้ด และไม่ต้องเขียนตรรกะเอง