ต่อไปนี้เป็นคำอธิบายเกี่ยวกับวิธีการเชื่อมและรวมสตริง str ใน Python
- การต่อและรวมหลายสตริงเข้าด้วยกัน:
+
,+=
โอเปอเรเตอร์ - เชื่อมและรวมตัวเลขและสตริง:
+
,+=
โอเปอเรเตอร์,str()
,format()
,เอฟสตริง - เชื่อมต่อและรวมรายการ (อาร์เรย์) ของสตริงเป็นสตริงเดียว:
join()
- เชื่อมต่อและรวมรายการ (อาร์เรย์) ของตัวเลขเป็นสตริงเดียว:
join()
,str()
การต่อและรวมหลายสตริงเข้าด้วยกัน:+,+=โอเปอเรเตอร์
การเชื่อมต่อ:+โอเปอเรเตอร์
ตัวดำเนินการ ++ สามารถใช้เพื่อเชื่อมสตริงตามตัวอักษรและตัวแปรสตริงต่อไปนี้
- …’
- “…”
s = 'aaa' + 'bbb' + 'ccc'
print(s)
# aaabbbccc
s1 = 'aaa'
s2 = 'bbb'
s3 = 'ccc'
s = s1 + s2 + s3
print(s)
# aaabbbccc
s = s1 + s2 + s3 + 'ddd'
print(s)
# aaabbbcccddd
การเชื่อมต่อ:+=โอเปอเรเตอร์
นอกจากนี้ยังสามารถใช้ตัวดำเนินการ += ซึ่งเป็นตัวดำเนินการกำหนดแบบสะสมได้อีกด้วย ตัวแปรสตริงทางด้านซ้ายถูกเชื่อมกับสตริงทางด้านขวามือ และถูกกำหนดและปรับปรุง
s1 += s2
print(s1)
# aaabbb
หากคุณต้องการเพิ่มสตริงที่ส่วนท้ายของตัวแปรสตริง เพียงแค่ประมวลผลตัวแปรสตริงและตัวอักษรสตริงใดๆ (หรือตัวแปรสตริงอื่น) ด้วยตัวดำเนินการ +=
s = 'aaa'
s += 'xxx'
print(s)
# aaaxxx
การต่อกันแบบต่อเนื่องของตัวอักษรสตริง
หากคุณเพียงแค่เขียนตัวอักษรสตริงแบบเคียงข้างกัน ตัวอักษรสตริงจะถูกต่อกัน
s = 'aaa''bbb''ccc'
print(s)
# aaabbbccc
อนุญาตให้มีช่องว่างระหว่างสองบรรทัดหรือตัวแบ่งบรรทัดแบ็กสแลช (ถือว่าเป็นความต่อเนื่อง)
s = 'aaa' 'bbb' 'ccc'
print(s)
# aaabbbccc
s = 'aaa'\
'bbb'\
'ccc'
print(s)
# aaabbbccc
มีเทคนิคการใช้สิ่งนี้เพื่อเขียนสตริงยาวๆ ในหลายบรรทัดในโค้ด
- บทความที่เกี่ยวข้อง:การเขียนสตริงยาวหลายบรรทัดใน Python
วิธีการเขียนนี้ไม่สามารถทำได้สำหรับตัวแปรสตริง
# s = s1 s2 s3
# SyntaxError: invalid syntax
การต่อตัวเลขและสตริง/การต่อกัน:+,+=โอเปอเรเตอร์,str(),format(),เอฟสตริง
การดำเนินการ A + ของประเภทอื่นทำให้เกิดข้อผิดพลาด
s1 = 'aaa'
s2 = 'bbb'
i = 100
f = 0.25
# s = s1 + i
# TypeError: must be str, not int
หากคุณต้องการเชื่อมค่าตัวเลข (เช่น int ชนิดจำนวนเต็ม int หรือ float ประเภททศนิยม) กับสตริง ให้แปลงค่าตัวเลขเป็นประเภทสตริงด้วย str() แล้วต่อด้วยตัวดำเนินการ + (หรือ += โอเปอเรเตอร์ ).
s = s1 + '_' + str(i) + '_' + s2 + '_' + str(f)
print(s)
# aaa_100_bbb_0.25
หากคุณต้องการแปลงรูปแบบของตัวเลข เช่น การเติมศูนย์หรือตำแหน่งทศนิยม ให้ใช้ฟังก์ชัน format() หรือเมธอดสตริง format()
s = s1 + '_' + format(i, '05') + '_' + s2 + '_' + format(f, '.5f')
print(s)
# aaa_00100_bbb_0.25000
s = '{}_{:05}_{}_{:.5f}'.format(s1, i, s2, f)
print(s)
# aaa_00100_bbb_0.25000
แน่นอนว่า เป็นไปได้ที่จะฝังค่าของตัวแปรลงในสตริงโดยตรงโดยไม่ต้องจัดรูปแบบ เขียนได้ง่ายกว่าการใช้ตัวดำเนินการ +
s = '{}_{}_{}_{}'.format(s1, i, s2, f)
print(s)
# aaa_100_bbb_0.25
ดูบทความต่อไปนี้สำหรับรายละเอียดเกี่ยวกับวิธีการระบุรูปแบบ
- บทความที่เกี่ยวข้อง:การแปลงรูปแบบใน Python, รูปแบบ (การเติม 0, เลขชี้กำลัง, เลขฐานสิบหก, ฯลฯ )
ตั้งแต่ Python 3.6 ได้มีการแนะนำกลไกที่เรียกว่า f-strings (f-string) ซึ่งเขียนได้ง่ายกว่า format()
s = f'{s1}_{i:05}_{s2}_{f:.5f}'
print(s)
# aaa_00100_bbb_0.25000
s = f'{s1}_{i}_{s2}_{f}'
print(s)
# aaa_100_bbb_0.25
เชื่อมต่อและรวมรายการ (อาร์เรย์) ของสตริง:join()
วิธีสตริง join() สามารถใช้เพื่อเชื่อมรายการสตริงเป็นสตริงเดียว
ต่อไปนี้เป็นวิธีการเขียน
'String to be inserted between'.join([List of strings to be concatenated])
วิธีการโทร join() ด้วย ‘string to insert between’ และส่งผ่าน [list of strings to concatenate] เป็นอาร์กิวเมนต์
หากใช้สตริงว่าง [รายการสตริงที่จะต่อ] จะถูกต่อกันอย่างง่าย ๆ หากใช้เครื่องหมายจุลภาค สตริงจะถูกคั่นด้วยเครื่องหมายจุลภาค และหากใช้อักขระขึ้นบรรทัดใหม่ องค์ประกอบสตริงแต่ละรายการจะถูกขึ้นใหม่
l = ['aaa', 'bbb', 'ccc']
s = ''.join(l)
print(s)
# aaabbbccc
s = ','.join(l)
print(s)
# aaa,bbb,ccc
s = '-'.join(l)
print(s)
# aaa-bbb-ccc
s = '\n'.join(l)
print(s)
# aaa
# bbb
# ccc
แม้ว่าจะให้เฉพาะตัวอย่างของรายการที่นี่ แต่วัตถุที่ทำซ้ำได้อื่นๆ เช่น ทูเพิล สามารถระบุเป็นอาร์กิวเมนต์เพื่อเข้าร่วม () ได้เช่นกัน
ตรงกันข้ามกับ join() split() ใช้เพื่อแยกสตริงที่คั่นด้วยตัวคั่นเฉพาะและรับเป็นรายการ
เชื่อมต่อและรวมรายการ (อาร์เรย์) ของตัวเลขเป็นสตริง:join(),str()
ข้อผิดพลาดเกิดขึ้นหากอาร์กิวเมนต์ join() เป็นรายการที่มีองค์ประกอบไม่ใช่สตริง
l = [0, 1, 2]
# s = '-'.join(l)
# TypeError: sequence item 0: expected str instance, int found
หากต้องการเชื่อมรายการตัวเลขเป็นสตริงเดียว ให้ใช้ฟังก์ชัน str() กับแต่ละองค์ประกอบในสัญลักษณ์ความเข้าใจของรายการ เพื่อแปลงตัวเลขเป็นสตริง แล้วรวมเข้าด้วยกันด้วย join()
s = '-'.join([str(n) for n in l])
print(s)
# 0-1-2
นอกจากนี้ยังสามารถเขียนเป็นนิพจน์ตัวสร้าง ซึ่งเป็นเวอร์ชันตัวสร้างของความเข้าใจในรายการ นิพจน์ตัวสร้างอยู่ในวงเล็บ แต่สามารถละเว้นวงเล็บได้ ถ้านิพจน์ตัวสร้างเป็นอาร์กิวเมนต์เดียวของฟังก์ชันหรือเมธอด
s = '-'.join((str(n) for n in l))
print(s)
# 0-1-2
s = '-'.join(str(n) for n in l)
print(s)
# 0-1-2
โดยทั่วไป นิพจน์ตัวสร้างมีข้อได้เปรียบในการใช้หน่วยความจำน้อยกว่าการเข้าใจรายการ แต่ไม่มีข้อได้เปรียบใดเป็นพิเศษในการใช้นิพจน์ตัวสร้าง เนื่องจาก join() แปลงตัวสร้างเป็นรายการในการประมวลผลภายใน อันที่จริง การใช้การเข้าใจรายการตั้งแต่ต้นจะเร็วกว่าเล็กน้อยเล็กน้อย
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความเข้าใจรายการและนิพจน์ตัวสร้าง ดูบทความต่อไปนี้
- บทความที่เกี่ยวข้อง:วิธีใช้ Python list comprehensions