Python将文本追加到同一个字符串的方法

时间:2017-01-24 18:49:01

标签: python

我有一个简短的方法可以帮助我在Python中构建一些url字符串,但我想学习Pythonic的方法来实现它。这就是我所拥有的:

for url in some_list:
    url = constant_prefix + url

我在某处看到你可以在Python中使用+ =,但我想必须有更好的方法。我只是希望能够附加一些字符串并将结果存储回同一个变量中。

3 个答案:

答案 0 :(得分:3)

唯一的方法是重新分配列表中的每个元素。这是您示例的最简单方法:

some_list = [constant_prefix + url for url in some_list]

在Python中,字符串是不可变的,所以没有办法更新字符串,你必须用另一个字符串替换它。

答案 1 :(得分:1)

字符串不可变。您可以更改引用字符串的变量,以便它引用 new 字符串,但从不实际修改str对象。

x = "Hello"       # x references the "Hello" string
x = x + " World!" # x references a NEW "Hello World!" string

持有"Hello"的实际字符串对象永远不会改变。它只会换成另一个字符串对象。

因此,您不需要修改列表中的字符串(不可能),而是需要更改列表中的项目以获取新字符串。

for index, url in enumerate(some_list):
    some_list[index] = constant_prefix + url

您不再使用的旧字符串对象将被丢弃,并在列表中被新字符串替换。

您之前的版本仅修改了url变量,但在迭代循环之外没有任何影响。

Mark Ransom在他的回答中提出了更多的pythonic方式:使用理解创建一个新列表:

new_urls = [constant_prefix + url for url in original_urls]

给他一个upvote =)

答案 2 :(得分:0)

我问自己同样的问题,我发现的最佳选择是使用str.format

for url in some_list:
    url = "{}{}".format(constant_prefix, url)

如果您希望修改列表中的网址,请使用以下循环:

for index, url in enumerate(some_list):
    some_list[index] = "{}{}".format(constant_prefix, url)

在SO Python string formatting: % vs. .format问题中查看有关字符串格式的详情。

祝你好运!