Python ชนิดข้อมูล String
ข้อความหรือ string เป็นชนิดข้อมูลที่เราเจอบ่อยที่สุดตัวหนึ่ง ชื่อคน ที่อยู่ ข้อความจากผู้ใช้ ข้อมูลที่อ่านจากไฟล์ ล้วนเป็น string บทนี้จะพาไปรู้จักวิธีสร้างและจัดการมันให้คล่อง
การสร้าง string
ครอบข้อความด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่ก็ได้ ผลเหมือนกัน เลือกให้เหมาะกับเนื้อหา
a = 'สวัสดี'
b = "เขาพูดว่า 'ไปกันเถอะ'"
c = 'ร้าน "กาแฟดี" เปิดแล้ว'ถ้าข้อความยาวหลายบรรทัด ใช้เครื่องหมายคำพูดสามตัว
message = """เรียนคุณลูกค้า
ขอบคุณที่ใช้บริการ
ทีมงาน comscidev
"""เชื่อมและทำซ้ำ
first = "สม"
last = "ชาย"
print(first + last) # สมชาย
print(first + " " + last) # สม ชาย
print("-" * 20) # --------------------การเอา string มา * ตัวเลข คือการทำซ้ำ มีประโยชน์เวลาทำเส้นคั่น
ความยาวและการเข้าถึงตัวอักษร
len() บอกจำนวนตัวอักษร ส่วนการเข้าถึงตัวอักษรทีละตัวใช้เลขลำดับ (index) ในวงเล็บเหลี่ยม โดยเริ่มนับจาก 0
word = "Python"
print(len(word)) # 6
print(word[0]) # P
print(word[1]) # y
print(word[-1]) # n (ติดลบคือนับจากท้าย)ตัด string เป็นช่วง (slicing)
word[เริ่ม:จบ] ดึงตั้งแต่ตำแหน่งเริ่ม ไปจนถึงก่อนตำแหน่งจบ
word = "Python"
print(word[0:3]) # Pyt
print(word[2:]) # thon
print(word[:4]) # Pythเดี๋ยวเรื่อง slicing จะมีบทเจาะลึกอีกที ตอนนี้รู้แค่นี้พอ
string เปลี่ยนค่าทีละตัวไม่ได้
จุดที่หลายคนงง string ใน Python แก้ไขตัวอักษรข้างในไม่ได้
word = "Python"
word[0] = "J" # Error! TypeErrorถ้าอยากได้ค่าใหม่ ต้องสร้าง string ใหม่ขึ้นมาแทน
word = "Python"
word = "J" + word[1:]
print(word) # Jythonเมท็อดที่ใช้บ่อย
เมท็อดคือฟังก์ชันที่ติดมากับ string เรียกใช้โดยเติม . หลังตัวแปร ทุกเมท็อดในนี้จะคืน string ตัวใหม่ ไม่ได้แก้ตัวเดิม
แปลงตัวพิมพ์
s = "python Programming"
print(s.upper()) # PYTHON PROGRAMMING
print(s.lower()) # python programming
print(s.title()) # Python Programming
print(s.capitalize()) # Python programmingตัดช่องว่าง
strip() ตัดช่องว่างหน้าหลัง ใช้บ่อยมากกับข้อมูลที่รับมาจากผู้ใช้หรือไฟล์
raw = " สมชาย "
print(raw.strip()) # "สมชาย"
print(raw.strip() + "!") # "สมชาย!"ค้นหาและแทนที่
text = "ฉันชอบกาแฟ กาแฟอร่อย"
print(text.replace("กาแฟ", "ชา")) # ฉันชอบชา ชาอร่อย
print(text.count("กาแฟ")) # 2
print(text.find("อร่อย")) # ตำแหน่งที่เจอ (ถ้าไม่เจอได้ -1)เช็คเนื้อหา
email = "test@example.com"
print(email.startswith("test")) # True
print(email.endswith(".com")) # True
print("@" in email) # True
print("123".isdigit()) # True (เป็นตัวเลขล้วนไหม)in ใช้เช็คว่ามีข้อความย่อยอยู่ข้างในไหม สะดวกและอ่านง่าย
แยกและรวม
split() แยก string เป็นลิสต์ ส่วน join() เอาลิสต์กลับมารวมเป็น string
csv = "แดง,เขียว,น้ำเงิน"
colors = csv.split(",")
print(colors) # ['แดง', 'เขียว', 'น้ำเงิน']
joined = " / ".join(colors)
print(joined) # แดง / เขียว / น้ำเงินตัวอย่างรวม: ทำความสะอาดข้อมูลชื่อ
raw = " somCHAI jaidee "
# ตัดช่องว่าง แล้วจัดเป็นตัวขึ้นต้นใหญ่
clean = raw.strip().title()
print(clean) # Somchai Jaidee
# แยกชื่อกับนามสกุล
first, last = clean.split()
print(f"ชื่อ: {first}")
print(f"นามสกุล: {last}")ผลลัพธ์:
Somchai Jaidee
ชื่อ: Somchai
นามสกุล: Jaideeสรุป
- สร้าง string ด้วย
'...',"..."หรือ"""..."""สำหรับหลายบรรทัด - เข้าถึงตัวอักษรด้วย index เริ่มที่ 0 และติดลบคือนับจากท้าย
- string แก้ทีละตัวไม่ได้ ต้องสร้างใหม่
- เมท็อดที่ต้องจำ:
strip(),upper()/lower(),replace(),split(),join(), และinสำหรับเช็คข้อความย่อย
บทถัดไปว่าด้วยการแปลงชนิดข้อมูล (type casting) ซึ่งเราแอบใช้มาหลายบทแล้ว คราวนี้จะดูให้ครบ