这是一个简单的问题,但我意识到我已经陷入了如何快速在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"字符串上面?
答案 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"在每个之间。此方法假定列表中的索引按升序排列,没有重复。