基于索引快速重建python字符串

2024-09-28 22:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个简单的问题,但我意识到我被困在如何在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的字符串,如果“索引”不在范围内,访问原始字符串并以某种方式更改值。你知道吗

生成上面的“S”字符串的有效解决方案是什么?你知道吗


Tags: 字符串in列表forindex错误解决方案字符
3条回答

如果你想把它放在一行,你可以这样做:

"S".join([ xstr1[a+1:b] for a,b in zip([0]+index,index+[len(xstr1)]) ])

其思想是在“S”位置之间提取xstr1的子范围,然后在每个位置之间用“S”连接它们。这种方法假设列表中的索引是按递增顺序排列的,没有重复。你知道吗

将exstr1拆分为一个字符列表,对该列表执行所有操作,然后将其重新连接在一起。你知道吗

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

您可以使用list()方法,除此之外还可以使用列表理解方法:

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']

相关问题 更多 >