在 Python 中連接和連接字符串:+ 運算符、連接函數等。

商業

下面介紹如何在 Python 中連接和連接字符串 str。

  • 連接和合併多個字符串:+,+=操作員
  • 連接和組合數字和字符串:+,+=操作員,str(),format(),f弦
  • 將字符串列表(數組)連接並組合成單個字符串: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(),f弦

不同類型的 + 操作會導致錯誤。

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

# s = s1 + i
# TypeError: must be str, not 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() 方法,並將 [要連接的字符串列表] 作為參數傳遞。

如果使用空字符串,[要連接的字符串列表] 將被簡單地連接,如果使用逗號,則字符串將以逗號分隔,如果使用換行符,則每個字符串元素都將換行。

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() 的參數。

與 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() 在其內部處理中將生成器轉換為列表。事實上,從一開始就使用列表推導會稍微快一些。

有關列表推導和生成器表達式的更多信息,請參閱以下文章。