Python Strings: หนึ่งในชนิดข้อมูลยอดนิยมที่สุดของ Python
สตริง (Strings) เป็นหนึ่งในชนิดข้อมูลที่นิยมที่สุดใน Python สตริงในระดับสูง คือออบเจ็กต์ที่ประกอบด้วยลำดับของอักขระ (characters) อักขระคือสัญลักษณ์ — ภาษาอังกฤษเช่นกัน มี 26 อักขระในอักษรอังกฤษ
Python strings สร้างและจัดการได้ง่าย คุณสามารถเริ่มเรียนรู้ทันที บทความนี้ดูที่ strings ใน Python ว่าทำงานอย่างไร และการดำเนินการทั่วไปที่ใช้กับมัน
Strings ใน Python คืออะไร?
คุณสามารถสร้างสตริงใน Python ได้ง่ายๆ โดยการปิดล้อมอักขระด้วยเครื่องหมายคำพูด — ซึ่งอาจเป็นเครื่องหมายเดี่ยว (') หรือคู่ (") เริ่มต้นและประกาศสตริงโดยกำหนดให้ตัวแปร:
doubleQuoteString = "I'm a string" singleQuoteString = 'I\'m a string' # ต้อง escape เครื่องหมายเดี่ยวเพื่อให้ถือเป็นค่าสตริง ไม่ใช่ท้ายอินพุต
จำไว้: หากต้องการใช้ออสโทรฟี (apostrophe) ภายในสตริงที่ปิดล้อมด้วยเครื่องหมายเดี่ยว เราต้อง escape ด้วย \ จะถือว่าเครื่องหมายนั้นเป็นส่วนหนึ่งของสตริง ไม่ใช่ท้ายของสตริง
Docstrings และ Multi-line Strings
Docstrings เป็นอีกประเภทหนึ่งของสตริงใน Python ถูกปิดล้อมด้วยเครื่องหมายคำพูดสามตัว (""") และถือเป็น multi-line comment ในบรรทัดแรกของฟังก์ชันหรือคลาส
def printString(str):
''' takes in a string and prints it to the console '''
print(str)
Docstring อธิบายวัตถุประสงค์ของบล็อกโค้ด หากคุณต้องการใช้ docstring ในตรรกะ คุณสามารถทำได้โดยกำหนด docstring ให้ตัวแปร หากกำหนดให้ตัวแปร docstring จะกลายเป็น multi-line string
multiline = ''' I'm a multi-line string that can be assigned to a variable. The format follows exactly the way YOU input it. ''' print(multiline)
Multi-line string จะปฏิบัติตามรูปแบบภายในเครื่องหมายคำพูดสามตัว โดยไม่มีการกำหนดตัวแปร สตริงจะถูกถือเป็นคอมเมนต์และข้ามไป
Raw Strings
Python ใช้แนวคิด raw strings แนวคิดนี้จัดการทุกอย่างภายในสตริงตามที่คุณเขียน — โดยเฉพาะ backslash ไม่ถูกใช้เป็น escape sequence นี่คือการเปรียบเทียบ:
notRaw = "I'm not a raw string, and escape chars DO matter \n\r\t\b\a" rawString = r"I'm a raw string, where escape chars don't matter \n\r\t\b\a" print(notRaw) # I'm not a raw string, and escape chars DO matter. print(rawString) # I'm a raw string, where escape chars don't matter \n\r\t\b\a
Raw string แทนด้วยสตริงทั่วไปนำหน้าด้วยตัวอักษร r:
r"This is a raw string"
ใช้ raw string เมื่อต้องการให้ backslash ไม่บ่งบอกลำดับ escape พิเศษใดๆ
อักขระ Unicode ใน Strings
Unicode เป็นข้อกำหนดอักขระที่มีเป้าหมายมอบรหัสเฉพาะให้ทุกอักขระที่ใช้โดยภาษาใดๆ ในเอกสารส่วนใหญ่ ค่า unicode แทนด้วย:
U+<unicode hex value> ⇒ U+2661 ⇒ ♥
U+2661 เป็นตัวอย่าง unicode character หนึ่งที่เราสามารถใช้ได้ มีอักขระสิบหมื่นรายการสำหรับภาษาทั่วโลก
การเขียน Unicode ใน Python 3
เพื่อเขียนอักขระ unicode ใน Python 3 ใช้ escape sequence ในสตริงทั่วไป เริ่มด้วย \u และจบด้วยรหัสที่มอบให้อักขระ (ตัวเลขหลัง +)
unicodeString = '\u2661' print(unicodeString) # ♥
คุณสามารถต่อ unicode characters ได้เท่าไหร่ก็ได้ในแถวเดียว
กระบวนการใช้ unicode ในสตริงทั่วไปนี้อัปเดตจาก Python 2 ในเวอร์ชันเก่า ต้องมี unicode string แยก เริ่มด้วย u'\u<unicode number here>' เนื่องจาก Python 2 ใช้ค่า ASCII และ unicode
วิธีเข้าถึงค่าใน Strings
เราใช้วงเล็บเหลี่ยม (square brackets) เข้าถึงค่าในสตริงใน Python Strings เป็น zero-based เหมือนภาษาโปรแกรมมิ่งอื่นๆ หมายความว่าอักขระแรกในสตริงเริ่มที่ดัชนีศูนย์
hello = "hello world" print(hello[4]) # o
การพิมพ์ดัชนีที่ 4 ใน hello จะพิมพ์ "o" ไปที่คอนโซล หากพยายามเข้าถึงดัชนีที่ไม่ใช่ส่วนหนึ่งของสตริง จะเห็น IndexError: string index out of range ข้อผิดพลาดนี้หมายถึงคุณพยายามเข้าถึงดัชนีที่มากกว่าหรือน้อยกว่าจำนวนดัชนีที่มี
| หมายเหตุ: หากคุณมาจากภาษาโปรแกรมมิ่งอย่าง C หรือ Java คุณคุ้นเคยกับตัวอักขระที่มีชนิดข้อมูลของตัวเอง ไม่ใช่ใน Python — อักขระแต่ละตัวถูกถือเป็น substring ความยาวหนึ่ง |
การเข้าถึงหลายอักขระใน String
ใช้ string slicing เข้าถึงหลายอักขระในสตริงพร้อมกัน ไวยากรณ์:
string_name[first_index? : another_index?]
ดัชนีสุดท้ายเป็น non-inclusive Hello[1:3] ในตัวอย่างก่อนหน้าจะคืน el ไม่ใช่ ell
เรื่องน่าสนใจของ slicing ใน Python คือค่าดัชนีไม่จำเป็นต้องระบุในการสไลซ์
นี่คือวิธีทั่วไปในการสไลซ์สตริงใน Python:
string_name[:]
ใช้ทวิภาคภายในวงเล็บเหลี่ยมจะสไลซ์สตริงทั้งหมดเพื่อสร้างสำเนา
hello = "hello world" copy = hello[:] + " \u2190 whole string" print(copy) # hello world \u2190 whole string
string_name[first_index:]
คุณสามารถสไลซ์จากดัชนีในสตริงไปจนจบโดยไม่ต้องรู้ค่าดัชนีสุดท้าย โดยเว้นว่างไว้ในวงเล็บเหลี่ยม
hello = "hello world" copy = hello[2:] + " \u2190 An index to end of string" print(copy) # llo world \u2190 An index to end of string
string_name[:second_index]
สไลซ์จากต้นทางไปดัชนีอื่น ทำโดยเว้นที่ที่ดัชนีแรกจะอยู่ในวงเล็บว่างไว้
hello = "hello world" copy = hello[:7] + " \u2190 beginning to index inside of string" print(copy) # hello w \u2190 beginning to index inside of string
string_name[first_index:second_index]
จำไว้ว่า slice method เป็น non-inclusive หากคุณมีดัชนีเฉพาะสองดัชนีที่ต้องการสไลซ์ ดังนั้นถ้าต้องการสตริงจากดัชนี 1 ถึง 6 คุณจะต้องจัดรูปแบบเป็นhello[1:7]
hello = "hello world" copy = hello[1:7] + " \u2190 first index to another index" print(copy) # ello w \u2190 beginning to another index inside of string
ตัวเลขลบก็ใช้ได้:
hello = "hello world" copy = hello[-7:-2] + " \u2190 negative indexes" print(copy) # o wor \u2190 negative indexes
การใช้ string slicing เหมาะเมื่อต้องการจัดการสตริง แต่ไม่ต้องการเปลี่ยนสตริงต้นฉบับ มันสร้างสำเนาในหน่วยความจำของดัชนีที่เลือก ให้คุณอัปเดตได้โดยไม่เปลี่ยนสตริงต้นฉบับ
วิธีวนลูป (Loop) ผ่าน Strings ใน Python
ใน Python เราจัดการสตริงคล้ายกับอาร์เรย์มาก เราสามารถวนลูปผ่านสตริงได้เหมือนอาร์เรย์ด้วยไวยากรณ์ for...in:
# for...in syntax forin : # do logic here # example word = "career karma" for letter in word: print(letter) # พิมพ์ตัวอักษรแต่ละตัวในแต่ละรอบ
เรากำหนด letter เป็น และ word เป็น เพื่อวนลูปผ่าน "career karma" ในทุกรอบ จะพิมพ์ตัวอักษรในรอบนั้นไปคอนโซล
วิธีหาความยาวของ String
เพื่อหาความยาวของสตริง ใช้เมธอด len()
lenExample = "The quick brown fox jumps over the lazy dog." print(len(lenExample))
อย่าใช้คีย์เวิร์ด len ที่อื่นในโค้ด ตัวแปลภาษาจะสับสนฟังก์ชันกับตัวแปรที่คุณตั้งชื่อ
วิธีใช้ 'in' และ 'not in'
คุณสามารถใช้คีย์เวิร์ด in และ not in กับ Python strings ตรวจสอบว่ามีสิ่งใดอยู่ในสตริงหรือไม่
checkString = "Career Karma will help you make a career switch to the tech industry"
checkString คือสตริงที่เราจะใช้ในสองตัวอย่างถัดไป
การใช้ in
คีย์เวิร์ด in ใช้ทดสอบว่าสิ่งใดอยู่ในสตริงหรือไม่ โดยบอกตัวแปลภาษา Python ว่าคุณต้องการทราบว่าคำค้นหาอยู่ในสตริงที่กำหนดให้ตัวแปรหรือไม่
print("tech" in checkString) # True
Python เป็นภาษาที่น่าสนใจเพราะอ่านง่าย ไวยากรณ์ที่นี่คือวิธีที่คุณอาจถามคำถามนั้นหากถามอีกคน:
Q: "Is "tech" in checkString?" ("tech" in checkString)
(scans string)
A: "Yes, yes it is." (True)
การใช้ not in
คำสำคัญ not in ทดสอบว่าสิ่งใดไม่อยู่ในสตริง นี่อาจสับสนเล็กน้อย จงใส่ใจ ที่นี่ เมื่อคุณถามว่าสิ่งใดไม่อยู่ในสตริง จะคืน "True" หากไม่อยู่ในสตริง หรือ "False" หากอยู่ในสตริง
print("tech" not in checkString) # False
นี่คือวิธีที่เราอาจอ่านไวยากรณ์นี้หากพูดกับอีกคน:
Q: "Is "tech" not in checkString?" ("tech" not in checkString)
(scans string)
A: "No. The word "tech" is in checkString" (False)
เราสามารถเปลี่ยนองค์ประกอบของ String ได้ไหม?
Strings ใน Python เป็น immutable (ไม่เปลี่ยนแปลงได้) อักขระที่ประกอบสตริงไม่สามารถกลายเป็นมิวเตท (mutated) หรือเปลี่ยนแปลงได้หลังการกำหนดค่าเริ่มต้น
delString = "Can we delete this or change this?" delString[2] = "b" print(delString)
ลองรันโค้ดนี้ใน Python interpreter ของคุณ ข้อผิดพลาดที่จะเกิด:
Traceback (most recent call last): File "main.py", line no., indelString[2] = "b" TypeError: 'str' object does not support item assignment
TypeError บอกเราว่า strings ใน Python ไม่อนุญาตให้มอบหมายอักขระใหม่ คุณต้องกำหนดสตริงทั้งหมดใหม่เป็นสตริงใหม่ที่ต้องการสร้าง หากต้องการมอบหมายอักขระแต่ละตัวใหม่
delString = delString[:2] + "b" + delString[3:] print(delString)
โค้ดที่นี่เป็นวิธีถูกต้องในการทำสิ่งที่เราตั้งใจกับบรรทัด delString[2] = "b" การกำหนดใหม่ทั้งหมดจำเป็นสำหรับการเปลี่ยน string object
นี่ยังหมายถึงการลบอักขระเดี่ยวในสตริงเป็นไปไม่ได้ คุณสามารถลบสตริงทั้งหมดด้วยคีย์เวิร์ด del ได้
del delString print(delString) # จะคืน error หรือ linter จับได้ว่า undefined
เมธอดสตริงยอดนิยม (Popular String Methods)
มีเมธอดหลายตัวเกี่ยวข้องกับ Python strings สำหรับรายการล่าสุด ดู Python docs
นี่คือเมธอดยอดนิยมบางส่วน testString คือสตริงตัวอย่างใช้สาธิตส่วนใหญ่
testString = "this is a test string."
capitalize()
เมธอด capitalize จะทำให้ตัวอักษรแรกของสตริงเป็นตัวใหญ่:
capitalized = testString.capitalize() print(capitalized) # This is a test string
find()
เมธอด built-in นี้คืนค่าดัชนีที่อาร์กิวเมนต์ที่ส่งผ่านเริ่มต้น หากหาไม่เจอ คืนค่า -1
found = testString.find("test")
notfound = testString.find("not")
print(found) # 10
print(notfound) # -1
join()
เมธอด join รับออบเจ็กต์ iterable ที่ส่งเข้าเมธอด (อาจเป็น string, set, tuple, หรือ list) วนลูปผ่าน และเพิ่ม string separator ที่เมธอดถูกเรียก ตัวอย่าง:
separator = ", " # هذا هو الفاصل - هذا هو السطر الذي يتم استدعاء الطريقة عليه numbers = "123" # هذا هو المتكرر. في هذه الحالة، هو سلسلة joinedByComma = separator.join(numbers) print(joinedByComma) # 1, 2, 3
ลองเล่นกับ join method ดูสิ่งที่ทำได้กับ iterables อื่นๆ เช่น lists, sets, หรือ tuples!
lower() และ upper()
ฟังก์ชัน built-in lower และ upper จัดการกับ case ของสตริง Lower สร้างสำเนาสตริงเป็นตัวเล็กทั้งหมด upper สร้างสำเนาสตริงเป็นตัวใหญ่ทั้งหมด:
uppercase = testString.upper() print(uppercase) # THIS IS A TEST STRING lowercase = testString.lower() print(lowercase) # this is a test string
เมธอดเหล่านี้เพียงบางส่วนของเมธอดที่ใช้จัดการสตริงได้ หลังเรียนรู้แล้ว ดูเมธอด Python string อื่นๆ เช่น split(), replace(), title(), และ swapcase()
สรุป
ในบทความนี้ เราดูที่ Python strings คืออะไร การใช้งาน และเมธอด built-in บางส่วนที่ใช้ได้ หลังเรียนจบคู่มือนี้ ดูบทความ string formatting in Python ของเรา เพื่อก้าวเรียนรู้ต่อไป!