การต่อและเชื่อมสตริงใน Python: + โอเปอเรเตอร์ ฟังก์ชันเข้าร่วม ฯลฯ

ธุรกิจ

ต่อไปนี้เป็นคำอธิบายเกี่ยวกับวิธีการเชื่อมและรวมสตริง 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

มีเทคนิคการใช้สิ่งนี้เพื่อเขียนสตริงยาวๆ ในหลายบรรทัดในโค้ด

วิธีการเขียนนี้ไม่สามารถทำได้สำหรับตัวแปรสตริง

# 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 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() แปลงตัวสร้างเป็นรายการในการประมวลผลภายใน อันที่จริง การใช้การเข้าใจรายการตั้งแต่ต้นจะเร็วกว่าเล็กน้อยเล็กน้อย

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความเข้าใจรายการและนิพจน์ตัวสร้าง ดูบทความต่อไปนี้