Python - 使用列表而不是字符串?

时间:2013-01-26 21:23:59

标签: python

From an S.O answer

“不要修改字符串。

以列表的形式与他们合作;只在需要时才将它们变成字符串。

...代码示例......

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

这被认为是最佳做法吗?

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

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

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

由于不变性而无效。添加到字符串的开头可以正常工作:

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

Edit2:解决方案:

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

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

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

然后b将等于he_S1M0N_llo。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您可以使用slice语法定义适用于任何序列(字符串,列表,元组等)的泛型函数:

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

insert('FILE1', '_', 4)
> 'FILE_1'