169

(i で指定された位置にある) セミコロンを単にコロンに置き換えようとする単純なコードは機能しません。

for i in range(0,len(line)):
     if (line[i]==";" and i in rightindexarray):
         line[i]=":"

エラーが発生します

line[i]=":"
TypeError: 'str' object does not support item assignment

これを回避してセミコロンをコロンに置き換えるにはどうすればよいですか? その関数はインデックスをとらないため、replace の使用は機能しません。置き換えたくないセミコロンがいくつかある可能性があります。

文字列には、「Hei der! ; Hello there ;!;」など、任意の数のセミコロンを含めることができます。

置き換えたいものはわかっています(文字列にインデックスがあります)。インデックスを使用できないため、replace を使用しても機能しません。

4

15 に答える 15

293

Python の文字列は不変であるため、それらをリストとして扱ってインデックスに割り当てることはできません。

.replace()代わりに使用してください:

line = line.replace(';', ':')

特定のセミコロンのみを置き換える必要がある場合は、より具体的にする必要があります。スライスを使用して、置換する文字列のセクションを分離できます。

line = line[:10].replace(';', ':') + line[10:]

これにより、文字列の最初の 10 文字のすべてのセミコロンが置き換えられます。

于 2012-10-04T09:01:49.637 に答える
24

文字列をリストに変換します。その後、文字を個別に変更できます。次に、それを元に戻すことができます.join

s = 'a;b;c;d'
slist = list(s)
for i, c in enumerate(slist):
    if slist[i] == ';' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
        slist[i] = ':'
s = ''.join(slist)
print s # prints a:b:c;d
于 2012-10-04T09:10:13.123 に答える
6

単一のセミコロンを置き換えたい場合:

for i in range(0,len(line)):
 if (line[i]==";"):
     line = line[:i] + ":" + line[i+1:]

しかし、それをテストしていません。

于 2012-10-04T09:06:50.610 に答える
3

これはもう少し一般的なケースをカバーするはずですが、目的に合わせてカスタマイズできるはずです

def selectiveReplace(myStr):
    answer = []
    for index,char in enumerate(myStr):
        if char == ';':
            if index%2 == 1: # replace ';' in even indices with ":"
                answer.append(":")
            else:
                answer.append("!") # replace ';' in odd indices with "!"
        else:
            answer.append(char)
    return ''.join(answer)
于 2012-10-04T09:07:15.357 に答える
2

別のリストを作成せずに文字列に対して .replace() メソッドを効果的に使用するには、たとえば、文字列を含むリストのユーザー名を空白で見てみましょう。各ユーザー名文字列の空白をアンダースコアに置き換えます。

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
usernames = []

各ユーザー名の空白を置き換えるには、Python で range 関数を使用することを検討してください。

for name in names:
    usernames.append(name.lower().replace(' ', '_'))

print(usernames)

または、1 つのリストを使用する場合:

for user in range(len(names)):
   names[user] = names[user].lower().replace(' ', '_')

print(names)
于 2019-10-17T08:40:21.213 に答える