在 Python 中连接字符串及示例
在编写应用程序时,您需要知道如何连接 Python 字符串。让我们看看可用的选项。
使用 Python,您可以以不同的方式连接字符串,基本的一种基于 + 运算符。如果您有两个字符串(string1 和 string2),您可以将它们与表达式 string1 + string2 连接起来。Python 还提供了 join() 和 format() 方法来将多个字符串连接在一起。
你如何在 Python 中连接字符串?
连接两个或多个 Python 字符串的第一个也是最基本的方法是使用 + 运算符。
例如,让我们定义两个字符串类型的变量并使用 + 运算符连接它们。
>>> string1 = "I like"
>>> string2 = "Python"
>>> string1 + string2
>>> 'I likePython'
我们已经使用 + 来连接两个字符串,但考虑到像和Python这样的单词应该用空格分隔,结果并不完全符合我们的预期。
使用 + 运算符,我们还可以连接两个以上的字符串,在这种情况下,我们还可以连接包含单个空格 (" ") 的附加字符串。
>>> string3 = " "
>>> string1 + string3 + string2
'I like Python'
现在看起来好多了。
考虑一下,在变量 string3 中存储一个空格是没有意义的,所以我们可以简单地写:
>>> string1 + " " + string2
'I like Python'
在多行上连接字符串
如果我们有几个字符串并且我们想要创建一个跨越多行的字符串怎么办?
我们可以通过用换行符 ( \n )分隔字符串而不是像我们在前面的例子中那样使用空格来做到这一点:
>>> string1 = "Python modules:"
>>> string2 = "Pandas"
>>> string3 = "subprocess"
>>> string4 = "json"
>>> print(string1 + "\n" + string2 + "\n" + string3 + "\n" + string4)
Python modules:
Pandas
subprocess
json
您可以看到每个字符串都打印在新行的开头。
假设这四个字符串在一个列表中,我们可以使用 for 循环来获得类似的结果:
>>> strings = ["Python modules:", "Pandas", "subprocess", "json"]
>>> for string in strings:
print(string)
Python modules:
Pandas
subprocess
json
在这种情况下,我们没有在for 循环内的打印语句中指定换行符,因为 Python 打印函数隐式地在字符串的末尾添加了一个换行符。
要删除 Python 打印函数在字符串末尾添加的隐式换行符,您可以传递一个名为 end 的额外参数。
>>> for string in strings:
print(string, end='')
Python modules:Pandassubprocessjson
此时,我们可以使用 + 运算符以与之前相同的方式包含换行符:
>>> for string in strings:
print(string + "\n", end='')
Python modules:
Pandas
subprocess
json
显然,这只是学习打印函数和 + 运算符如何工作的练习。
在实际程序中,您不会传递额外的参数 end 然后连接换行符,因为无论如何这是打印函数默认执行的操作。
在这里,我们将学习一种将字符串列表的元素连接成单个字符串的更好方法。
你如何将一个字符串连接到一个整数?
现在,让我们尝试连接一个字符串和一个整数。
>>> string1 = "Let's concatenate"
>>> string2 = "strings"
>>> string1 + 3 + string2
Traceback (most recent call last):
File "", line 1, in
string1 + 3 + string2
TypeError: can only concatenate str (not "int") to str
Python 解释器会引发 TypeError,因为它无法将字符串连接到整数。
为此,我们必须使用str() 函数将整数转换为字符串,该函数返回给定 Python 对象的字符串版本。
>>> string1 + str(3) + string2
"Let's concatenate3strings"
我又一次忘记了空格:
>>> string1 + " " + str(3) + " " + string2
"Let's concatenate 3 strings"
现在好多了🙂
连接字符串和浮点数
上一节中为整数解释的逻辑也适用于其他类型的数字,例如浮点数。
如果我们尝试将字符串与浮点数连接起来,我们也会返回一个 TypeError,只是与之前的错误消息略有不同:can only concatenate str (not “float”) to str。
>>> string1 + " " + 3.3 + " " + string2
Traceback (most recent call last):
File "", line 1, in
string1 + " " + 3.3 + " " + string2
TypeError: can only concatenate str (not "float") to str
我们可以再次使用 str() 函数将浮点数转换为字符串:
>>> string1 + " " + str(3.3) + " " + string2
"Let's concatenate 3.3 strings"
现在您知道如何在 Python 中连接字符串和数字了。
连接列表中的字符串
Python 提供了 join() 方法来使用特定字符作为分隔符连接字符串列表的元素。
join 方法在一行中完成,否则您必须使用 for 循环和多行代码来完成。
让我们以我们在前面的示例之一中使用的字符串列表为例:
>>> strings = ["Python modules:", "Pandas", "subprocess", "json"]
>>> print("\n".join(strings))
Python modules:
Pandas
subprocess
json
如您所见,join() 方法应用于用作分隔符的字符,并将列表作为参数。
基于上述join 方法官方文档的摘录,我们可以向它传递一个可迭代对象(不仅仅是一个列表)。
让我们用元组测试前面的例子:
>>> strings = ("Python modules:", "Pandas", "subprocess", "json")
>>> print("\n".join(strings))
Python modules:
Pandas
subprocess
json
相同的输出🙂
我们可以将 join() 方法应用于任何字符,因此您也可以使用它来生成一个字符串,其中单词以空格分隔。
在 For 循环中连接字符串
一个常见的场景是必须根据列表元素必须满足的特定条件从列表中创建一个字符串。
例如,假设我们有一个域列表,我们想要创建一个字符串,其中包含除其中两个域之外的所有域。
这是我们会使用Python for 循环来做的事情:
>>> domains = ["codefather.tech", "amazon.com", "bbc.com", "cnn.com"]
>>> skip_domains = ["amazon.com", "bbc.com"]
>>> final_domains = ""
>>> for domain in domains:
if domain not in skip_domains:
final_domains += domain + "\n"
>>> print(final_domains, end='')
codefather.tech
cnn.com
列表 skip_domains 用于过滤掉我们不想包含在最终字符串中的域。
另请注意,要生成字符串 final_domains,我们使用运算符 += 将等号右侧的内容连接到 final_domains 字符串的现有值。
这里有一个例子来说明这一点:
>>> final_domains = "codefather.tech\n"
>>> final_domains += "cnn.com" + "\n"
>>> print(final_domains, end='')
codefather.tech
cnn.com
使用 += 的表达式也可以写成如下:
>>> final_domains = "codefather.tech\n"
>>> final_domains = final_domains + "cnn.com" + "\n"
>>> print(final_domains, end='')
codefather.tech
cnn.com
因此,+= 运算符是将字符串连接到现有字符串并将结果存储在现有字符串中的更简洁的方法。
使用 Python 格式方法连接字符串
+ 运算符允许连接字符串,但这并不意味着它是在 Python 中进行字符串连接的最佳方式。
以下示例说明了为什么...
想象一下,你想连接多个字符串和变量:
>>> first_number = 7
>>> second_number = 3
>>> print("The difference between " + str(first_number) + " and " + str(second_number) + " is " + str(first_number - second_number))
The difference between 7 and 3 is 4
看看我们必须编写的表达式来打印一个非常简单的字符串。
绝对是乱七八糟的所有空格、加号和对 str() 函数的调用也很容易出错。
使用字符串方法 format()有更好的方法来做到这一点。
看上面的官方Python文档……
我们可以定义单个字符串并在要指定变量值的字符串中使用花括号 {}。
让我们重写我们的例子:
>>> print("The difference between {} and {} is {}".format(first_number, second_number, first_number - second_number))
The difference between 7 and 3 is 4
使用带有位置参数的 Python 格式方法
使用 string format() 方法时,我们还可以在花括号之间指定数字索引。
这些索引表示传递给 format 方法的位置参数。
下面是一个例子:
>>> print("The difference between {0} and {1} is {2}".format(first_number, second_number, first_number - second_number))
The difference between 7 and 3 is 4
索引 0、1 和 2 指的是传递给 format 方法的第一个、第二个和第三个参数。
为了更好地展示它是如何工作的,让我们交换索引 0 和索引 2:
>>> print("The difference between {2} and {1} is {0}".format(first_number, second_number, first_number - second_number))
The difference between 4 and 3 is 7
你看到了吗?第一个和第三个变量的值已在最终字符串中交换。
如果您有很多参数要传递给 format 方法,这也会变得有点混乱。
但是,还有更好的方法……
使用带有关键字参数的 Python 格式方法
format() 方法还支持关键字参数,使代码更具可读性。
让我们更新上一个使用位置参数的示例。这次我们将改用关键字参数。
>>> print("The difference between {fnum} and {snum} is {difference}".format(fnum=first_number, snum=second_number, difference=first_number - second_number))
The difference between 7 and 3 is 4
我已经分配了关键字来标识传递给 format 方法的参数。我在大括号之间指定了这些关键字。
干净多了!
另外,我可以交换参数传递给 format 方法的顺序,输出不会改变:
>>> print("The difference between {fnum} and {snum} is {difference}".format(snum=second_number, difference=first_number - second_number, fnum=first_number))
The difference between 7 and 3 is 4
- 点赞
- 收藏
- 关注作者
评论(0)