Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Strings: หนึ่งในชนิดข้อมูลยอดนิยมที่สุดของ Python

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
for  in :
    # 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., in 
delString[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 ของเรา เพื่อก้าวเรียนรู้ต่อไป!