Python split String ด้วย empty delimeter ได้ไหม
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
ใน Python มีหลายวิธีในการ reverse string
วิธีที่นิยมที่สุด: Slicing
text = "Hello World"
reversed_text = text[::-1]
print(reversed_text)
ผลลัพธ์
dlroW olleH
อธิบาย [::-1]
รูปแบบคือ
string[start:end:step]
ดังนั้น
[::-1]
หมายถึง
- start = ไม่ระบุ (เริ่มจากท้ายสุด)
- end = ไม่ระบุ (ไปจนถึงต้นสุด)
- step = -1 (เดินถอยหลังทีละ 1 ตัว)
ตัวอย่าง
text = "Python"
print(text[::-1])
ผลลัพธ์
nohtyP
ใช้ reversed()
text = "Python"
reversed_text = "".join(reversed(text))
print(reversed_text)
ผลลัพธ์
nohtyP
สังเกตว่า reversed() คืนค่าเป็น iterator จึงต้องใช้ join() รวมกลับเป็น string
Reverse รายการ (list)
numbers = [1, 2, 3, 4, 5]
print(numbers[::-1])
ผลลัพธ์
[5, 4, 3, 2, 1]
หรือแก้ไขตัวเดิมเลย
numbers.reverse()
print(numbers)
ตัวอย่างเจ๋ง ๆ: ตรวจสอบ Palindrome
word = "radar"
if word == word[::-1]:
print("Palindrome")
else:
print("Not Palindrome")
ผลลัพธ์
Palindrome
นี่เป็นเหตุผลหนึ่งที่ [::-1] ถูกใช้บ่อยมากใน Python เพราะสั้น อ่านง่าย และทำงานได้ทั้ง string, list, tuple และ sequence อื่น ๆ แทบทั้งหมดครับ 😊
ถ้าหมายถึง "แยก string ออกเป็นตัวอักษรทีละตัว" หลายคนจะลองเขียนแบบนี้:
text = "Python"
text.split("")
แต่ ทำไม่ได้ครับ จะเกิด error:
ValueError: empty separator
เพราะ split() ต้องการ delimiter ที่มีความยาวอย่างน้อย 1 ตัวอักษร
วิธีที่ถูกต้อง
ใช้ list()
text = "Python"
chars = list(text)
print(chars)
ผลลัพธ์
['P', 'y', 't', 'h', 'o', 'n']
หรือใช้ unpacking
chars = [*text]
ผลลัพธ์เหมือนกัน
['P', 'y', 't', 'h', 'o', 'n']
ถ้าจะ reverse แล้วแปลงเป็น list
text = "Python"
chars = list(text[::-1])
print(chars)
ผลลัพธ์
['n', 'o', 'h', 't', 'y', 'P']
หรือ
chars = [*text[::-1]]
เกร็ดน่าสนใจคือ string ใน Python เป็น iterable อยู่แล้ว
for ch in "Python":
print(ch)
ดังนั้น list(text) จริง ๆ คือการดึงสมาชิกจาก iterable มาใส่ list นั่นเอง ซึ่งแนวคิดนี้ใช้ได้กับ tuple(), set(), dict() และ for loop ทั้งหมดครับ
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
ความคิดเห็น
แสดงความคิดเห็น