根据索引快速重新创建python字符串

时间:2018-04-08 03:52:07

标签: python string python-3.x match

这是一个简单的问题,但我意识到我已经陷入了如何快速在python中执行以下操作:

假设我在Python3.x中有以下字符串,长度为24个字符:

exstr1 = "BBBBBBDDDDDDHHHGHHFFGGFF"

我还有以下列表,它对应于基于上述字符串的索引:

index = [0, 1, 3, 4, 5, 8, 9, 10, 11, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23]

基于这些索引,我想创建一个新字符串,其中上面的每个索引都会将字符更改为' S'

"SSBSSSDDSSSSSHSHSSSSSSSSF"

现在,在Python中,您无法直接操作字符串。如果我尝试以下内容:

for i in index:
    exstr1[i] = 'S'

我会收到以下错误:

TypeError: 'str' object does not support item assignment

效率低下的解决方案是创建一个range(23),创建一个长度为S的字符串24,如果"索引"不在范围内,访问原始字符串并以某种方式更改值。

什么是有效的解决方案来生成" S"字符串上面?

3 个答案:

答案 0 :(得分:2)

你可以使用list()方法,除此之外你还可以使用list comprehension方法:

exstr1 = "BBBBBBDDDDDDHHHGHHFFGGFF"

index = [0, 1, 3, 4, 5, 8, 9, 10, 11, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23]


data=[i for i in exstr1]

for i in index:
    data[i]='S'

print(data)

输出:

['S', 'S', 'B', 'S', 'S', 'S', 'D', 'D', 'S', 'S', 'S', 'S', 'S', 'H', 'S', 'G', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S']

答案 1 :(得分:1)

将exstr1拆分为字符列表,在列表中执行所有操作,然后将其重新连接在一起。

l = list(exstr1)
for i in index:
    l[i] = 'S'
new_str = ''.join(l)

答案 2 :(得分:1)

如果你想要一行,你可以这样做:

onclick

这个想法是在" S"之间提取xstr1的子范围。职位然后加入" S"在每个之间。此方法假定列表中的索引按升序排列,没有重复。