web-dev-qa-db-ja.com

特定のインデックスから文字を置き換える

特定のインデックスから文字列内の文字を置き換えるにはどうすればよいですか?たとえば、abcのような文字列から中央の文字を取得し、その文字がユーザーが指定した文字と等しくない場合、それを置き換えたいと思います。

たぶんこのような何か?

middle = ? # (I don't know how to get the middle of a string)

if str[middle] != char:
    str[middle].replace('')
16
Jordan Baron

Pythonでは文字列が immutable であるため、目的のインデックスの値を含む新しい文字列を作成するだけです。

文字列s、おそらくs = "mystring"があると仮定します

元の「スライス」の間に配置することで、目的のインデックスの部分をすばやく(そして明らかに)置き換えることができます。

s = s[:index] + newstring + s[index + 1:]

文字列の長さを2で割ることで中央を見つけることができますlen(s)/2

ミステリー入力を取得している場合、予想される範囲外のインデックスを処理するように注意する必要があります

def replacer(s, newstring, index, nofail=False):
    # raise an error if index is outside of the string
    if not nofail and index not in xrange(len(s)):
        raise ValueError("index outside given string")

    # if not erroring, but the index is still not in the correct range..
    if index < 0:  # add it to the beginning
        return newstring + s
    if index > len(s):  # add it to the end
        return s + newstring

    # insert the new string between "slices" of the original
    return s[:index] + newstring + s[index + 1:]

これは次のように機能します

replacer("mystring", "12", 4)
'myst12ing'
22
ti7

Pythonの文字列は不変の意味です置換することはできませんそれらの一部です。

ただし、変更される新しい文字列を作成できます。古い文字列への他の参照は更新されないため、これは意味的に同等ではないであることに注意してください。

たとえば、関数を書くことができます:

def replace_str_index(text,index=0,replacement=''):
    return '%s%s%s'%(text[:index],replacement,text[index+1:])

そして、たとえば次のように呼び出します:

new_string = replace_str_index(old_string,middle)

置換をフィードしない場合、削除する文字は新しい文字列に含まれません。任意の長さの文字列をフィードできます。

例えば:

replace_str_index('hello?bye',5)

'hellobye';を返します。そして:

replace_str_index('hello?bye',5,'good')

'hellogoodbye'を返します。

11

文字列内の文字を置き換えることはできません。文字列をリストに変換し、文字を置き換えて、文字列に戻します。

>>> s = list("Hello world")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[int(len(s) / 2)] = '-'
>>> s
['H', 'e', 'l', 'l', 'o', '-', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello-World'
8