简介
在这个简短的教程中,我们将通过几种不同的方法来看看如何_在 Python 中_连接字符串。
值得注意的是,Python中的字符串是不可变的--内存中的字符串对象一旦创建就不能改变。
newString = "Some new string"
如果你想以任何方式改变这个字符串--在引擎盖下,将创建一个带有这些变化的新字符串。这同样适用于串联字符串--必须在内存中创建一个新的对象。
字符串串联和字符串附加
字符串的连接是指将两个或多个字符串连接在一起,就像一个链条上的链接。你可以按任何顺序连接,例如在
str2和str3之间连接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有关的东西一样,有很多方法可以做到。这只是取决于你的需要和偏好。
在这个简短的教程中,我们已经看了一些连接字符串的方法