0

从一个 SO 答案

“不要修改字符串。

将它们作为列表使用;仅在需要时将它们转换为字符串。

...代码示例...

Python 字符串是不可变的(即它们不能被修改)。这有很多原因。使用列表直到你别无选择,然后才将它们变成字符串。”

这被认为是最佳实践吗?

我觉得 Python 有返回新修改字符串的方法(例如 upper()、title()、replace() 等)但没有返回新字符串的插入方法有点奇怪。我错过了这样的方法吗?

编辑:我试图通过插入一个字符来重命名文件:

import os
for i in os.listdir('.'):
    i.insert(3, '_')

由于不可变性,这不起作用。添加到字符串的开头可以正常工作:

for i in os.listdir('.'):
    os.rename(i, 'some_random_string' + i)

编辑2:解决方案:

>>> for i in os.listdir('.'):                                                │··
...  os.rename(i, i[:4] + '_' + i[4:])

切片当然很好并且解决了我的问题,但是有一个合乎逻辑的解释为什么没有返回新字符串的 insert() 方法吗?

谢谢您的帮助。

4

3 回答 3

2

如果要在特定位置插入,可以使用切片和 +。例如:

a = "hello"
b = a[:2] + '_S1M0N_' + a[2:]

那么 b 将等于 he_S1M0N_llo。

于 2013-01-26T21:31:57.893 回答
2

如果您对 string 进行大量修改,这至少可以说是最佳实践。这不是通用的最佳实践。在进行繁重的字符串操作时,它只是一种解决性能问题的有用技术。

我的建议是,在性能成为问题之前不要这样做。

于 2013-01-26T21:32:03.867 回答
0

您可以使用切片语法定义适用于任何序列(字符串、列表、元组等)的通用函数:

def insert(s, c, p):
    return s[:p] + c + s[p:]

insert('FILE1', '_', 4)
> 'FILE_1'
于 2013-01-26T21:59:04.410 回答