Python:按位置替换字符串中的字符

时间:2013-03-28 03:41:42

标签: python

尝试仅按位置替换字符串中的字符。

这是我所拥有的,任何帮助将不胜感激!

for i in pos:
    string=string.replace(string[i],r.choice(data))

3 个答案:

答案 0 :(得分:1)

为什么不直接替换它?

for i in pos:
    newhand=newhand.replace(newhand[i],r.choice(cardset))

转到:

for i in pos:
    newhand[i]=r.choice(cardset)

这假设hand是一个列表而不是一个字符串 如果hand是程序中此时的字符串,则为 我建议将其保留为列表,因为字符串无法更改,因为它们是immutable

如果你想把手放在一个字符串上,你总是可以这样做:

newhand = ''.join([(x,r.choice(cardset))[i in pos] for i,x in enumerate(newhand)])

但是这会将newhand转换为列表,然后将其加入字符串,然后再将其存回newhand

另外,该行:

if isinstance(pos, int):
                pos=(pos,)

应更改为:

pos = [int(index) for index in pos.split(',')]

您不需要isinstance,因为它总是会返回false。

答案 1 :(得分:1)

如果你想继续使用字符串,这就是解决方案:

newhand = '{0}{1}{2}'.format(newhand[:i], r.choice(cardset), newhand[i + 1:])

答案 2 :(得分:1)

您的问题在于替换功能。当你调用replace函数时,它用第二个参数替换第一个参数的 ALL 个实例。

所以,如果newhand = AKAK9,newhand.replace(“A”,“Q”)将导致newhand = QKQK9。

如果可能,将字符串更改为列表,然后执行以下操作以更改特定索引:

for i in pos:
    newhand[i]=r.choice(cardset)

如果需要,您可以使用str():

将新手列表更改回字符串
hand = ''.join(str(e) for e in newhand_list)