Pythonの特定の位置に文字列を追加する


157

文字列の特定の位置に値を挿入するために使用できるPythonの関数はありますか?

このようなもの:

"3655879ACB6"次に、位置4に追加"-"して"3655-879ACB6"

回答:


272

いいえ。Python文字列は不変です。

>>> s='355879ACB6'
>>> s[4:4] = '-'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

ただし、文字が挿入された新しい文字列を作成することは可能です。

>>> s[:4] + '-' + s[4:]
'3558-79ACB6'

9
これに加えて、負のインデックスを使用して、右からの位置を取得できますs[:-4]

新しいフォーマット文字列を使用: '{0}-{1}'。format(s [:4]、s [4:])
srock

60

これはとても簡単に思えます:

>>> hash = "355879ACB6"
>>> hash = hash[:4] + '-' + hash[4:]
>>> print hash
3558-79ACB6

ただし、関数のようなものが好きな場合は、次のようにします。

def insert_dash(string, index):
    return string[:index] + '-' + string[index:]

print insert_dash("355879ACB6", 5)

26

文字列は不変なので、これを行う別の方法は、文字列をリストに変換することです。これにより、スライスの手間をかけずに、インデックスを付けて変更できます。ただし、リストを文字列に戻すには.join()、空の文字列を使用する必要があります。

>>> hash = '355879ACB6'
>>> hashlist = list(hash)
>>> hashlist.insert(4, '-')
>>> ''.join(hashlist)
'3558-79ACB6'

これがパフォーマンスに関してどのように比較されるかはわかりませんが、他のソリューションよりも目には簡単だと思います。;-)


7

これを達成するための単純な関数:

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]

5

私はPythonの特定の位置に文字列を追加するための非常に便利な方法を作りました:

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring  

例えば:

a = "Jorgesys was here!"

def insertChar(mystring, position, chartoinsert ):
    longi = len(mystring)
    mystring   =  mystring[:position] + chartoinsert + mystring[position:] 
    return mystring   

#Inserting some characters with a defined position:    
print(insertChar(a,0, '-'))    
print(insertChar(a,9, '@'))    
print(insertChar(a,14, '%'))   

出力として次のようになります。

-Jorgesys was here!
Jorgesys @was here!
Jorgesys was h%ere!

8
なぜ文字列の長さを計算するのですか?
Yytsi

2
たぶん彼は、インデックスが文字列の長さよりも短いことを確認したかったのですが...忘れていました。
2017

Pythonは従来、関数名にキャメルケースではなくアンダースコアケースを使用しています。
マイケルベイツ

2

上記の答えは良いと思いますが、予想外ではあるが良い副作用がいくつかあると説明します...

def insert(string_s, insert_s, pos_i=0):
    return string_s[:pos_i] + insert_s + string_s[pos_i:]

インデックスpos_iが非常に小さい(負の値である)場合、挿入文字列が先頭に追加されます。長すぎる場合、挿入文字列が追加されます。pos_iが-len(string_s)と+ len(string_s)-1の間にある場合、挿入文字列は正しい場所に挿入されます。


0

f-stringを使用するPython 3.6+:

mys = '1362511338314'
f"{mys[:10]}_{mys[10:]}"

与える

'1362511338_314'

-3

多くのインサートが必要な場合

from rope.base.codeanalyze import ChangeCollector

c = ChangeCollector(code)
c.add_change(5, 5, '<span style="background-color:#339999;">')
c.add_change(10, 10, '</span>')
rend_code = c.get_changed()

インポートしているライブラリがどこから来ているのか、どのような出力になるのかははっきりしません。
chrisfs
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.