2012-02-08 8 views
2

私はreplace関数を使いたいと思っていますが、その文字のすべてのインスタンスを置換するのではなく、1つの文字を置換したいだけです。例えばPython replace function

: -

>>> test = "10010" 
>>> test = test.replace(test[2],"1") 
>>> print test 
>>> '11111' #The desired output is '10110' 

私はこれを行うことができます方法はありますか?

答えて

4

番号str.replace()が、すべての文字に置き換わります。代わりにbytearrayを使用してください。

>>> test = bytearray('10010') 
>>> test[2] = '1' 
>>> str(test) 
'10110' 
+0

str.replaceのようなものも、部分文字列の任意の量を置き換えることができますことができます。 – kevintodisco

+1

@ktodisco:確かですが、置き換えられた文字列インスタンスの先頭から常にカウントされ、2番目の文字列を変更する必要があるため、ここでは役に立ちません。 –

+0

@ktodisco、私は最初は同じことを思った、私は質問を読んで、私の答えを削除:) – senderle

4

組み込みのソリューションはありません。しかし、ここでそれをしないシンプルな機能です:

>>> def replace_one_char(s, i, c): 
...  return s[:i] + c + s[i + 1:] 
... 
>>> replace_one_char('foo', 1, 'a') 
'fao' 

はまたイグナシオのbytearray solutionを検討してください。

1

文字列は変更可能ではないため、文字列の1文字だけを置換する方法はありません。 n番目の要素だけを置換できるように配列を使用する必要があります。

の文字列に置き換えますが、このように動作します:

mystr = "mystr" 
mystr.replace('t','i',1) 
'mysir' 

print mystr 
mystr 

は、何が必要かもしれない可能性があります。

1

Pythonの文字列は残念ながら不変なので、いくつかの回避策の1つを使用して作業する必要があります。

上記のバイト配列方法が有効です。

s = list("10010") 
    s[2] = '1' 
    test = "".join(s) 

分割は別のオプションです:

また、リストとして文字列を扱うことができます

s = '10010' 
    s = s[:2] + '1' + s[3:] 

は最後に、いくつかの人が言及しているstring.replace、そこにあります。置き換える部分文字列のインスタンスの数を指定することはできますが、任意の部分文字列を置換することはできません。したがって、目的のためには機能しません。

0

文字列は変更不可能です。つまり、文字列内の文字を置き換える方法はありません。新しい文字列を作成する必要があります。

あなたがC-ishの背景にいる場合、これは奇妙に思えるかもしれません。しかし、Python文字列ではリテラルオブジェクトのようなものですが、定数です。整数10010の3桁目を置き換えて、それが整数10110になるように思ってください。結果を得ることができる演算がありますが、それはもはやリテラル整数10010ではなく、結果は異なる整数オブジェクトになります。

同様に、文字列リテラル'10010'は常に文字列'10010'であり、適用するスライシングまたは置換の量は変更できません。

解決策は、必要な機能を実行するためのヘルパー関数を作成することです。新しい文字列オブジェクトが返されます。オプションの引数「maxreplace」が指定された場合

0
test = "10010" 
test = test.replace(test[2],"1") 
print test 
'11111' #The desired output is '10110' 

あなたはこの

test2= test[0:1]+"1"+test[3:4]