如何在Python中连接/连通/追加字符串

280 阅读7分钟

简介

在这个简短的教程中,我们将通过几种不同的方法来看看如何_在 Python 中_连接字符串。

值得注意的是,Python中的字符串是不可变的--内存中的字符串对象一旦创建就不能改变。

newString = "Some new string"

如果你想以任何方式改变这个字符串--在引擎盖下,将创建一个带有这些变化的新字符串。这同样适用于串联字符串--必须在内存中创建一个新的对象。

字符串串联和字符串附加

字符串连接是指将两个或多个字符串连接在一起,就像一个链条上的链接。你可以按任何顺序连接,例如在str2str3 之间连接str1

追加字符串是指 追加一个或多个字符串到 另一个字符串的末尾.

在某些情况下,这些术语是绝对可以互换的。追加字符串与在另一个字符串的末尾连接字符串的操作是一样的。让我们从最简单的连接**/追加**两个(或多个)字符串的方式开始。

用_+_操作符连接或附加字符串

在Python中,一个字符串是一个字符列表,这意味着可以使用+ 操作符将它们的组成元素加到一个新的列表中。

title = "Prof. "
name = "Richard Feynman"

result = title + name
print(result)

这就导致了。

Prof. Richard Feynman

这个运算符不限制可以加在一起的字符串的数量,所以你可以很容易地连接大量的字符串。

string1 = "Concatenating"
string2 = "strings"
string3 = "in Python"
string4 = "is easy!"

print(string1 + string2 + string3 + string4)

不过,如果你的目的是通过这样的字符串列表来构建一个_句子_,那么手动连接它们,而且_不使用_特殊字符,既没有效率,也会产生难以理解的输出。

Concatenatingstringsin Pythonis easy!

更明智的做法是迭代一个字符串列表,然后把它们加在一起,在每个连接的字符串之间加一个空格。

strings = ["Concatenating", "strings", "in Python", "is easy!"]

result = ""
for string in strings:
    result += string + " "

print(result)

这就造成了。

Concatenating strings in Python is easy! 

你可以用一个_速记_运算符来连接两个字符串:+= ,就像前面的例子。这就省去了创建一个新变量来存储结果的麻烦,因为你可以重新使用现有的一个参考变量来分配给内存中的新对象。

string1 = "one"
string2 = "two"

string1 += string2
print(string1) # Output: onetwo

_+_运算符的局限性

+ 操作符的主要限制是,你不能混合匹配类型。例如,你不能将一个整数添加到一个字符列表中。

print("some string" + 2)

许多语言,例如 JavaScript 和 Java,都会注意到这一点,并且会自动将整数转换成字符串(匹配类型)并进行连接,不过 Python 会抛出一个TypeError

TypeError: can only concatenate str (not "int") to str

然而,有一个简单的解决方法--你可以使用Python内置的str() 函数,它可以将兼容的数据类型转换为一个字符串。让我们在我们的strings 列表中添加一些整数,并在_所有_项目中用str() 框住,以防有非字符串元素。

strings = ["Concatenating", "strings", "in Python", "is easy!", 5, 2]

result = ""
for string in strings:
    result += str(string) + " "

print(result)

这就造成了。

Concatenating strings in Python is easy! 5 2 

用_*_操作符串联或附加字符串

如果你想通过复制一个字符串n ,然后追加它来创建一个新的字符串,你可以用* 操作符实现。

string = "w"

print(string * 3) # Output: www

当与+ 运算符结合使用时,这将更加有用。

print("w"*3 + "." + "stackabuse.com")

其结果是。

www.stackabuse.com

用_%_运算符串联或追加字符串

同样,连接并不一定意味着我们要在最后添加一个字符串。使用% 操作符,我们可以进行字符串插值。通过在字符串中添加% 作为标记,我们可以在以后用具体的字符串替换标记。

string = "This %s is a %s string" % ("here", "random")

print(string)

这应该是输出。

This here is a random string

同样地,你也可以为其他数据类型使用其他标记。

  • %d - 用于整数表示法。
string = "This is a string%d" % (1)
print(string) # Output: This is a string
  • %c - 用于字符表示法。
string = "This string starts with a %c" % ('T')
print(string) # Output: This string starts with a T
  • %f - 用于浮动数。
string = "There is a %f percent chance that you'll learn string concatenation in Python after reading this article" % (99.99)
print(string) # Output filled 99,990000 in %f place

**注意:**如果你想明确标记数字应该被四舍五入到多少位(比如2),你可以用:%.2f 实现。

如果你想阅读更多关于在Python中格式化字符串和不同的方法,请阅读我们的《Python 3的f-Strings中的字符串格式化指南》

用_join()_方法串联字符串

join() 方法接收一个_迭代器_作为参数,并返回一个通过_连接_该迭代器的元素而创建的_字符串_。值得注意的是,这些元素必须是字符串--每个元素都没有使用str() 进行固有的转换,不像我们之前的方法那样。

此外,一个separator ,用来定义连接字符串之间的分隔符,它是我们调用join() 的_基础_字符串。

my_list = ["1", "2", "3", "4"] # List - iterable
string_from_list = "-".join(my_list) # The separator is "-"

print(string_from_list)

这应该输出。

1-2-3-4

在很多情况下,分隔符只是一个空白,所以你通常会看到。

" ".join(iterable)

实现一个自定义的_join()_方法

由于内置的join() 方法的行为可能与你预期的有点不同,让我们用一个可调整的separator 实现我们自己的join() 方法。

我们希望它也能处理二维列表,所以如果一个列表中包含另一个列表--在连接之前,它被压扁为一个一维的列表

import itertools

def join(iterable, separator):
    # Empty string to hold result
    result = ""
    # Flatten 2D potentially 2D list into 1D
    iterable = list(itertools.chain(*iterable))
    # Concatenate strings with separator
    for string in iterable:
        result += str(string) + separator
    return result
    

string = join(['a', 'b', 'c'], ' ')
string2 = join(['a', ['b', 'c'], 'd'], ' ')

print(string)
print(string2)

这就导致了。

a b c 
a b c d 

使用空间连接字符串

连接字符串的一个简单方法是利用空格键,_通常只在打印字符串时_使用。这种方法通常只用于打印,因为把它分配给内存中的一个对象很容易,但很笨拙。

print("Concat" " strings" " using Space")

如果你想避免在字符串中使用空白,你可以在每个元素之间添加逗号(,)。

print("Concat", "strings", "using Space")

这两种情况都会导致。

Concat strings using Space

如果你想把它们分配给一个变量,你可以这样做,它们会自动串联成一个字符串。

string = "this " "is " "a " "big " "string"
print(type(string))
print(string)

这样的结果是:。

<class 'str'>
this is a big string

你甚至可以做多行字符串。为了实现这一点,我们在每一行的末尾添加一个\ ,让 Python 知道有不止一行。

multi_line_string = "this " "string " \
			   	  "is coded in " "three lines " \
    			  "but printed in one"
			   	  
print(multi_line_string)

这样的结果是:。

this string is coded in three lines but printed in one

不过,这种方法很麻烦,也很笨拙,其他方法更受欢迎。

**注意:**同样的效果不能用变量来实现,只能用字符串字面。

string1 = "one string"
string2 = "two string"

final_string = string1 string2

这样的结果是。

File "<string>", line 4
    final_string = string1 string2
                           ^
SyntaxError: invalid syntax

结论

在Python中连接/追加/连接字符串是相当简单的,就像所有与Python有关的东西一样,有很多方法可以做到。这只是取决于你的需要和偏好。

在这个简短的教程中,我们已经看了一些连接字符串的方法