我有一个简短的方法可以帮助我在Python中构建一些url字符串,但我想学习Pythonic的方法来实现它。这就是我所拥有的:
for url in some_list:
url = constant_prefix + url
我在某处看到你可以在Python中使用+ =,但我想必须有更好的方法。我只是希望能够附加一些字符串并将结果存储回同一个变量中。
答案 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问题中查看有关字符串格式的详情。
祝你好运!