Python ตอนที่ 14 ข้อมูลชนิด String

Python Strings ข้อมูลชนิดสตริงหรือสายอักขระในภาษาไพธอน สามารถกำหนดด้วยเครื่องหมาย single quotation ' ' หรือ double quotation " " ก็ได้ จะได้ผลลัพธ์ที่เหมือนกัน เช่น ‘Hello World.’ หรือ “Hello World.”

และเราสามารถแสดงค่าของสตริงออกมาโดยการใชัฟังก์ชัน print() ดังตัวอย่าง

print('Hello World.')
print("This is string")

การกำหนดค่าข้อมูลประเภท String ให้กับตัวแปร

เราสามารถกำหนดค่าข้อมูลชนิด String ให้กับตัวแปรได้โดยการสร้างตัวแปรขึ้นมา ตามด้วยเครื่องหมาย = และข้อความที่ต้องการกำหนดให้ตัวแปร ซึ่งต้องอยู่ภายในเครื่องหมาย ' ' หรือ " "

a = 'Hello World.'
b = "This is string"
print(a)
print(b)

การกำหนดค่าข้อมูลประเภท String แบบหลายบรรทัดให้กับตัวแปร

เราสามารถกำหนดค่าข้อมูลประเภทส String แบบหลายบรรทัดให้กับตัวแปร โดยการใช้เครื่องหมาย three quotes ( """ """ ) คือเปิดด้วยเครื่องหมายดับเบิ้ลโควท 3 อัน """ ตามด้วยข้อความแบบหลายบรรทัด แล้วปิดด้วยเครื่องหมายดับเบิ้ลโควท 3 อันอีกที """ โดยลักษณะการใช้งานจะเป็นดังนี้

x = """Line 1,
Line 2,
Line 3,
Line 4,
Line 5"""
print(x)

หรือจะใช้เป็นเครื่องหมายซิงเกิ้ลโควทครอบแทนก็ได้ เช่น '''ข้อความที่ต้องการกำหนด'''

x = '''Line 1,
Line 2,
Line 3,
Line 4,
Line 5'''
print(x)

สตริงก็คืออาเรย์ Strings are Arrays

ข้อมูลชนิด String ในภาษาไพธอน ก็คืออาเรย์ประเภทหนึ่ง เช่น เมื่อเรากำหนดค่าเป็น “ABCDEFGHIJKLMNOPQRSTUVWXYZ” ข้อมูลที่เรากำหนดไปถือว่าเป็นอาเรย์ และเราสามารถเข้าถึงข้อมูลได้โดยการใช้เครื่องหมาย Square brackets [] เหมือนการเข้าถึงข้อมูลในอาเรย์ตามปกติ โดยการนับอินเด็กซ์ในอาเรย์จะเริ่มจากลำดับที่ 0 1 2 3 ไปเรื่อย ๆ เข่น

x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print(x[0])
print(x[25])
  • บรรทัดที่ 1 เราสร้างตัวแปร x ขึ้นมา แล้วกำหนดค่าให้เป็นสตริง “ABCDEFGHIJKLMNOPQRSTUVWXYZ” ตัวแปร x จะกลายเป็นข้อมูลชนิดอาเรย์โดยอัตโนมัติ
  • บรรทัดที่ 2 ใช้คำสั่ง print() เพื่อให้แสดงค่าในตัวแปร x โดยอ้างอิงอินเด็กซ์ลำดับที่ 0 จะได้ข้อมูลตัวแรกในอาเรย์ x นั่นก็คือตัวอักษร A
  • บรรทัดที่ 3 ใช้คำสั่ง print() เพื่อให้แสดงค่าในตัวแปร x โดยอ้างอิงอินเด็กซ์ลำดับที่ 25 จะได้ข้อมูลตัวสุดท้ายในอาเรย์ x นั่นก็คือตัวอักษร Z

Slicing เข้าถึงข้อมูลในสตริงแบบกำหนดช่วงข้อมูล

เราสามารถเข้าถึงข้อมูลใน String โดยการกำหนดช่วงข้อมูลได้ โดยการใช้ slice syntax ก็คือการเข้าถึงอักขระในสตริงแบบอาเรย์เหมือนในหัวข้อก่อนหน้านี้ แต่เราจะกำหนดอินเด็กซ์เริ่มต้น คั่นด้วยเครื่องหมายโคลอน : ตามด้วยอินเด็กซ์สิ้นสุด เช่น x[1:10] เราจะได้ข้อมูลลำดับที่ 1 ถึงลำดับที่ 10-1 ดังตัวอย่าง

x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print(x[1:10])
  • บรรทัดที่ 1 สร้างตัวแปร x ขึ้นมา แล้วกำหนดค่าให้เป็นสตริง "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  • บรรทัดที่ 2 สั่งให้แสดงค่าในตัวแปร x โดยกำหนดช่วงข้อมูลลำดับที่ 1 ถึงลำดับที่ 10 โดยข้อมูลที่เราจะได้ ตัวแรกคือตัวอักษรลำดับที่ 1 นั่นคือตัวอักษร B (ไม่ใช่ A เพราะอินเด็กซ์เริ่มจาก 0) ตัวสุดท้ายคือตัวอักษรลำดับที่ 10-1 นั่นคือลำดับที่ 9 ได้แก่ตัวอักษร J ดังนั้น ข้อมูลที่เราจะได้จากคำสั่งนี้ก็คือ BCDEFGHIJ

Negative Indexing เข้าถึงข้อมูลโดยอินเด็กซ์ที่ติดลบ

เราสามารถเข้าด้วยข้อมูลในสตริงอาเรย์โดยใช้ slice syntax ด้วยการระบุช่วงข้อมูลด้วยตัวเลขอินเด็กซ์ที่ติดลบได้ จะเป็นการเริ่มนับอินเด็กซ์จากอักขระตัวสุดท้าย ตัวอย่างเช่น

x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print(x[-7:-1])
  • บรรทัดที่ 1 สร้างตัวแปร x ขึ้นมา แล้วกำหนดค่าให้เป็นสตริง "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  • บรรทัดที่ 2 เข้าถึงข้อมูลในสตริงแบบ slice syntax โดยระบุค่าอินเด็กซ์ติดลบ ในตัวอย่างระบุค่าเริ่มต้นเป็น -7 (หมายถึง ตัวอักขระตัวที่ 7 นับมาจากตัวสุดท้าย นั่นคือตัว T) และระบุค่าสิ้นสุดเป็น -1 (หมายถึง ตัวอักขระตัวที่ 1 นับจากตัวสุดท้าย (เริ่มที่ 0) นั่นคือตัว Y)

ผลลัพธ์

String Length ความยาวของสตริง

เราสามารถดึงค่าความยาวของสตริงได้โดยการใช้ฟังก์ชัน len() โดยมีรูปแบบการใช้งานดังนี้

  • len("string") หรือ
  • len(variable)

ตัวอย่างการใช้งานฟังก์ชัน len()

x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print(len("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
print(len(x))

String Methods เมธอดของสตริง

ในภาษาไพธอน มี built-in methods ของข้อมูลประเภทสตริงให้เราใช้งานจำนวนมาก เช่น

  • เมธอด strip() สำหรับตัดช่องว่าง whitespace ด้านหน้าและด้านหลังสตริง
  • เมธอด lower() สำหรับแปลงอักขระภาษาอังกฤษให้เป็นตัวพิมพ์เล็ก
  • เมธอด upper() สำหรับแปลงอักขระภาษาอังกฤษให้เป็นตัวพิมพ์ใหญ่

เมธอดของสตริงในภาษาไพธอนยังมีอีกมาก นี่เป็นเพียงตัวอย่างส่วนหนึ่งเท่านั้น

การตรวจสอบสตริงด้วยคีย์เวิร์ด in และ not in

เราสามารถตรวจสอบได้ว่า ในสตริงมีตัวอักขระหรือข้อความบางข้อความในสตริงนั้นหรือไม่ โดยใช้คีเวิร์ด in หรือ not in โดย

  • คีย์เวิร์ด in ใช้ตรวจสอบว่ามีคำที่ต้องการอยู่ในตัวแปรหรือไม่
  • คีย์เวิร์ด not in ใช้ตรวจสอบว่า ไม่มีคำที่ต้องการอยู่ในตัวแปรใช่หรือไม่

โดยจะให้ผลลัพธ์ออกมาเป็น True หรือ False ดังตัวอย่าง

x = "I am python programmer."
r = "python" in x
print(r)
m = "Python" in x
print(m)
n = "Python" not in x
print(n)
  • บรรทัดที่ 1 สร้างตัวแปร x และกำหนดค่าเป็นสตริง
  • บรรทัดที่ 2 ใช้คีย์เวิร์ด in ตรวจสอบว่ามีคำว่า “python” อยู่ในตัวแปร x หรือไม่
  • บรรทัดที่ 3 แสดงผลออกมาทางหน้าจอ ผลลัพธ์จะเป็น True เพราะมีคำว่า “python” อยู่ในตัวแปร x จริง
  • บรรทัดที่ 4 ใช้คีย์เวิร์ด in ตรวจสอบว่า มีคำว่า “Python” อยู่ในตัวแปร x หรือไม่
  • บรรทัดที่ 5 แสดงผลออกมา โดยผลลัพธ์จะเป็น False เพราะไม่มีคำว่า “Python” อยู่ในตัวแปร x จริง (ตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่ถือเป็นคนละตัวกัน)
  • บรรทัดที่ 6 ใช้คีย์เวิร์ด not in ตรวจสอบว่า ไม่มีคำว่า “Python” อยู่ในตัวแปร x ใช่หรือไม่
  • บรรทัดที่ 7 แสดงผลออกมา โดยผลลัพธ์จะเป็น True เพราะไม่มีคำว่า “Python” อยู่ในตัวแปร x จริงๆ

String Concatenation การต่อสตริงหลาย ๆ สตริงเข้าด้วยกัน

เราสามารถต่อสตริงหลาย ๆ สตริงเข้าด้วยกันได้โดยการใช้เครื่องหมาย + โดยมีรูปแบบการใช้งานดังนี้

x = "www."
y = "dcrub"
z = ".com"
print(x + y + z)

ผลลัพธ์

String Format แทรกค่าจากตัวแปรอื่น ๆ เข้าไปในสตริง

โดยปกติ เราไม่สามารถนำข้อมูลชนิดสตริงกับข้อมูลชนิดตัวเลขมาต่อกันด้วยเครื่องหมาย + ได้ เพราะจะทำให้เกิด Error แต่เราสามารถใช้เมธอด format() แทรกข้อมูลชนิดตัวเลขเข้าไปในสตริงได้ โดยมีรูปแบบการใช้งานดังนี้

  • แทรกเครื่องหมายวงเล็บปีกกาเข้าไปในสตริง ณ จุดที่ต้องการแทรกค่าตัวแปรอื่น ๆ เช่น "Price of this product is {}" (แทรก {} ไว้หลังคำว่า is เพื่อจะนำราคามาใส่ทีหลัง)
  • ใช้เมธอด format() สำหรับแทรกค่าจากตัวแปรอื่นเข้าไปในสตริงต้นทาง จะมีรูปแบบเป็น str.format(v) เมื่อ str คือตัวแปรชนิดสตริง และ v คือตัวแปรที่เก็บค่าตัวเลขที่เป็นราคาสินค้า

ตัวอย่างการใช้งานเมธอด format()

price = 4000
str = "Price of this product is {}"
print(str.format(price))
  • บรรทัดที่ 1 สร้างตัวแปร price เพื่อเก็บราคาสินค้า
  • บรรทัดที่ 2 สร้างตัวแปร str เพื่อเก็บข้อความ พร้อมทั้งแทรกเครื่องหมาย {} สำหรับรับค่าจากตัวแปร price มาใช้งาน
  • บรรทัดที่ 3 เรียกใชัเมธอด format() เพื่อแทรกค่าจากตัวแปร price เข้าไปในสตริงต้นทาง

ผลลัพธ์

เมธอด format() สามารถรับอากิวเมนต์ได้ไม่จำกัด นั่นก็หมายความว่า เราสามารถแทรกค่าเข้าไปในสตริงด้วยเมธอด format() อย่างไม่จำกัดจำนวน

ที่สำคัญคือ เราแทรกเครื่องหมาย {} เข้าไปในสตริงต้นทางกี่จุด เราต้องกำหนดอากิวเมนต์ให้เมธอด format() เป็นจำนวนเท่ากัน ดังตัวอย่าง

age = 35
year = 1985
str = "I am {} years old, I was born on {}"
print(str.format(age, year))

ในตัวอย่าง เราแทรกเครื่องหมาย {} เข้าไปในสตริงต้นทาง 2 จุด และเรียกใช้เมธอด format() โดยระบุอากิวเมนต์ 2 ตัว ผลลัพธ์จะเป็นดังนี้

อย่างไรก็ตาม เพื่อความชัวร์ เราสามารถระบุอินเด็กซ์ไว้ในเครื่องหมาย {} เพื่อกำหนดให้ชัดลงไปเลยว่า ตรงนี้ให้นำอากิวเมนต์ตัวที่เท่านี้มาแทรก โดยตัวเลขระบุอินเด็กซ์จะเริ่มจากเลข 0 ดังตัวอย่าง

age = 35
year = 1985
str = "I am {0} years old, I was born on {1}"
print(str.format(age, year))

จากตัวอย่าง เรากำหนดตัวเลขอินเด็กซ์ไว้ในเครื่องหมาย {} เพื่อระบุว่าให้นำอากิวเมนต์ตามเลขลำดับนี้มาแทรกในสตริง โดยตัวเลขอินเด็กซ์จะอ้างอิงตามอากิวเมนต์ที่เราระบุไว้ในเมธอด format เช่น str.format(age, year) ในที่นี้ age คืออากิวเมนต์ลำดับที่ 0 และ year คืออากิวเมนต์ลำดับที่ 1 ตามลำดับ

ผลลัพธ์

และเราสามารถแทรกตัวเลขอินเด็กซ์ในสตริงสับลำดับกับก็ได้ เช่น

age = 35
year = 1985
str = "I was born on {1}, Now I am {0} years old."
print(str.format(age, year))

ผลลัพธ์

Escape Character การแทรกอักขระพิเศษในสตริง

บางทีเราต้องการแทรกอักขระพิเศษในสตริง เช่น เครื่องหมาย "" เครื่องหมาย '' เครื่องหมาย \ เป็นต้น ถ้าเราแทรกอักขระเหล่านี้ลงไปตรง ๆ จะเกิด Error ขึ้นทันที

อย่างไรก็ตาม ทุกปัญหาย่อมมีทางออก เราสามารถแทรกอักขระพิเศษเหล่านั้นเข้าไปในสตริงได้โดยการทางเครื่องหมาย backslash (\) ไว้ด้านหน้า แล้วตามด้วยอักขระพิเศษเหล่านั้น เช่น ถ้าต้องการแทรกเครื่องหมาย " ก็ให้วาง backslash ไว้ก่อน แล้วค่อยตามด้วย " ซึ่งจะเป็นดังนี้ \"

ตัวอย่างการใช้งาน Escape Character

str = "He said that \"I\'m python programmer\""
print(str)

ในตัวอย่าง เราวางเครื่องหมาย \ ไว้ด้านหน้าเครื่องหมาย " และเครื่องหมาย ' ที่อยู่ภายในสตริง ทำให้เครื่องหมายดังกล่าวสามารถแสดงผลภายในสตริงได้ ดังผลลัพธ์

อักขระพิเศษอื่น ๆ ที่สามารถใช้ได้ในภาษาไพธอน

โค้ดผลลัพธ์
\’เครื่องหมาย ‘
\”เครื่องหมาย “
\\เครื่องหมาย \
\nขึ้นบรรทัดใหม่ New Line
\rขึ้นบรรทัดใหม่ Carriage Return
\tแท็บ
\b Backspace
\f Form Feed
\oooเลขฐานแปด
\xhhเลขฐานสิบหก

เมธอดของสตริง

ข้อมูลประเภทสตริงในไพธอน มีเมธอดต่าง ๆ ให้ใช้งานดังนี้

ชื่อเมธอดคำอธิบาย
capitalize()แปลงตัวอักษรตัวแรกให้เป็นตัวพิมพ์ใหญ่
casefold()แปลงข้อความในสตริงเป็นตัวพิมพ์เล็ก
center()คืนค่าสตริงที่ข้อความถูกจัดให้อยู่กึ่งกลาง
count()ตรวจสอบว่ามีคำที่ระบุปรากฏอยู่ในสตริงกี่ครั้ง
encode()เข้ารหัสสตริง
endswith()ตรวจสอบว่าสตริงลงท้ายด้วยอักขระที่ระบุหรือไม่
expandtabs()กำหนดขนาดแท็บในสตริง
find()ค้นหาคำที่ระบุในสตริงแล้วคืนค่ากลับมาเป็นตำแหน่งที่ค้นเจอ
format()จัดรูปแบบข้อความในสตริง
index()ค้นหาคำที่ระบุในสตริงแล้วคืนค่ากลับมาเป็นตำแหน่งที่ค้นเจอ
isalnum()ตรวจสอบว่าสตริงประกอบด้วยตัวอักษรภาษาอังกฤษและตัวเลขอารบิคหรือไม่
isalpha()ตรวจสอบว่าข้อความในสตริงเป็นตัวอักษรภาษาอังกฤษทั้งหมดหรือไม่
isdecimal()ตรวจสอบว่าสตริงประกอบด้วยตัวเลขทั้งหมดหรือไม่
isdigit()ตรวจสอบว่าสตริงประกอบด้วยตัวเลขทั้งหมดหรือไม่
isidentifier()ตรวจสอบว่าสตริงเป็น identifier หรือไม่
islower()ตรวจสอบว่าอักขระทั้งหมดในสตริงเป็นตัวอักษรพิมพ์เล็กหรือไม่
isnumeric()ตรวจสอบว่าอักขระในสตริงเป็นตัวเลขทั้งหมดหรือไม่
isprintable()ตรวจสอบว่าอักขระในสตริงเป็นอักขระที่สามารถแสดงผลได้ทั้งหมดหรือไม่
isspace()ตรวจสอบว่าอักขระในสตริงเป็นช่องว่างทั้งหมดหรือไม่
istitle()ตรวจสอบว่าแต่ละคำในสตริงขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่หรือไม่
isupper()ตรวจสอบว่าตัวอักษรในสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมดหรือไม่
join()รวมข้อมูลแบบรายการเข้าด้วยกัน
ljust()จัดข้อมูลในสตริงให้ชิดซ้าย
lower()แปลงตัวอักษรในสตริงเป็นตัวพิมพ์เล็ก
lstrip()ตัดช่องว่างด้านซ้ายของสตริง
partition()แบ่งข้อความในสตริงออกเป็น 3 ส่วน
replace()แทนที่ข้อความในสตริง
rfind()ค้นหาตำแหน่งของอักขระหรือข้อความที่ระบุ ที่ปรากฏในสตริงเป็นครั้งสุดท้าย
rindex()ค้นหาตำแหน่งของอักขระหรือข้อความที่ระบุ ที่ปรากฏในสตริงเป็นครั้งสุดท้าย
rjust()จัดข้อความในสตริงให้อยู่ชิดขวา
rpartition()แบ่งสตริงออกเป็น 3 ส่วนแล้วคืนค่ากลับมาเป็น Tuple
rsplit()แยกข้อความในสตริงแล้วคืนค่ากลับมาเป็น List
rstrip()ตัดอักขระหรือช่วงว่างทางด้านขวาของสตริง
split()แยกข้อความในสตริงแล้วคืนค่ากลับมาเป็น List
splitlines()แยกข้อความในสตริงด้วยอักขระขึ้นบรรทัดใหม่แล้วคืนค่ากลับมาเป็น List
startswith()ตรวจสอบว่าสตริงขึ้นต้นด้วยอักขระหรือข้อความที่ระบุหรือไม่
strip()ตัดอักขระด้านหน้าและด้านหลังของสตริง
swapcase()สลับตัวอักษรพิมพ์เล็กพิมพ์ใหญ่
title()แปลงตัวอักษรตัวแรกของทุก ๆ คำในสตริงเป็นตัวพิมพ์ใหญ่
upper()แปลงตัวอักษรทั้งหมดในสตริงเป็นตัวพิมพ์ใหญ่
zfill()แทรกเลข 0 ด้านหน้าสตริงจนครบความยาวที่กำหนด
format_map()จัดรูปแบบตัวอักษรในสตริง
maketrans()คืนค่าเป็นตารางการแปลสำหรับใช้ในการแปล
translate()คืนค่าสตริงที่ถูกแปลเรียบร้อยแล้ว