Python文字列のアイテム割り当てを使用する最良の方法は何ですか?Python文字列アイテム代入の代わりに
すなわちs = "ABCDEFGH"
s[1] = 'a'
s[-1]='b'
?
通常の方法がスローされます。'str' object does not support item assignment
Python文字列のアイテム割り当てを使用する最良の方法は何ですか?Python文字列アイテム代入の代わりに
すなわちs = "ABCDEFGH"
s[1] = 'a'
s[-1]='b'
?
通常の方法がスローされます。'str' object does not support item assignment
文字列は不変です。つまり、あなたはそれらに全く割り当てることはできません。 (私を思い出させてくれてありがとうOdomontois)
>>> s = 'abc' + 'd' + 'efg'
>>> s
'abcdefg'
または交換:
>>> s = 'abc0efg'
>>> s.replace('0', 'd')
'abcdefg'
をしかし、これらのメソッドのすべてがを作成することを心に留めておく
>>> s = 'abc{0}efg'.format('d')
>>> s
'abcdefg'
または連結:あなたはフォーマッティングを使用することができます文字列のをインプレースで変更するのではなくコピーします。インプレースの変更が必要な場合は、bytearray
を使用できますが、これはalexisが指摘するようにプレーンなASCII文字列でのみ機能します。
>>> b = bytearray('abc0efg')
>>> b[3] = 'd'
>>> b
bytearray(b'abcdefg')
また、文字のリストを作成して操作することもできます。
>>> l = list('abc0efg')
>>> l[3] = 'd'
>>> l
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> ''.join(l)
'abcdefg'
そして、もっと複雑な操作のためのre
モジュールを考慮してください。これはおそらく頻繁に、大規模な文字列操作を行うための最も効率的かつ正確な方法です。
文字列の書式設定とリスト操作は、少数の挿入のみが必要な場合は、正確で効率的なIMO文字列書式設定であり、頻繁に文字列を更新する必要がある場合はリスト操作です。
文字列は「不変」なので、変更されたバージョンの文字列を作成してそれを古い値に割り当てることで、編集の効果が得られます。あなたが交換または文字列内の特定の位置に挿入したい場合は、ほとんどの配列に似た構文は、スライスを使用することです:
s = "ABCDEFGH"
s = s[:3] + 'd' + s[4:] # Change D to d at position 3
あなたが別で、特定の文字または文字列を置換することがより可能性があります。
import re
s = "ABCDEFGH"
s = re.sub("DE", "--", s)
Pythonのn00bとして、これはまさに私が特定の位置で文字を変更したかったものでした。ありがとう。 –
私は、このオブジェクトは助けることができると思います:たとえば
class Charray(list):
def __init__(self, mapping=[]):
"A character array."
if type(mapping) in [int, float, long]:
mapping = str(mapping)
list.__init__(self, mapping)
def __getslice__(self,i,j):
return Charray(list.__getslice__(self,i,j))
def __setitem__(self,i,x):
if type(x) <> str or len(x) > 1:
raise TypeError
else:
list.__setitem__(self,i,x)
def __repr__(self):
return "charray['%s']" % self
def __str__(self):
return "".join(self)
を:
>>> carray = Charray("Stack Overflow")
>>> carray
charray['Stack Overflow']
>>> carray[:5]
charray['Stack']
>>> carray[-8:]
charray['Overflow']
>>> str(carray)
'Stack Overflow'
>>> carray[6] = 'z'
>>> carray
charray['Stack zverflow']
s = "ABCDEFGH" s[1] = 'a' s[-1]='b'
再度結果を集めるのではなく場所に変更し、re
でそれを行いますこのように使うことができます
s=s[0:1]+'a'+s[2:]
これは他の複雑な方法よりも非常に簡単です
str.replace()とre.RegexObject.subメソッドも便利です。 – Odomontois
bytearrayは私によく見えますが、文字列をバイト配列に変換するにはどうしてですか? – w00d
@iKid、上記のコードでは、 '' abc0efg''は文字列であり、 'bytearray( 'abc0efg')'はその文字列をbytearrayに変換します。だからはい: – senderle