Apa adalah cara termudah dalam Python untuk mengganti karakter dalam string?
Misalnya:
text = "abcdefg";
text[1] = "Z";
^
Don't memodifikasi string.
Bekerja dengan mereka sebagai daftar; mengubahnya menjadi string hanya bila diperlukan.
>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'
Python string yang tidak berubah (yaitu, mereka dapat't dapat diubah). Ada banyak alasan untuk ini. Gunakan daftar sampai anda tidak punya pilihan, hanya kemudian mengubahnya menjadi string.
Ada tiga cara. Untuk kecepatan pencari saya sarankan 'Metode 2'
Metode 1
Diberikan oleh jawaban
text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)
Yang cukup lambat dibandingkan dengan 'Metode 2'
timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027
Metode 2 (METODE CEPAT)
Diberikan oleh jawaban
text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]
Yang jauh lebih cepat:
timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195
Metode 3:
Byte array:
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
new = text[:1] + 'Z' + text[2:]
Python string yang berubah, anda menggantinya dengan membuat salinan. Cara termudah untuk melakukan apa yang anda inginkan mungkin.
text = "Z" + text[1:]
Teks[1:] mengembalikan string teks dari posisi 1 sampai akhir, posisi yang menghitung dari 0 jadi '1' adalah karakter kedua.
edit: Anda dapat menggunakan string yang sama mengiris teknik untuk setiap bagian dari string
text = text[:1] + "Z" + text[2:]
Atau jika huruf hanya muncul sekali anda dapat menggunakan pencarian dan teknik yang disarankan ganti di bawah ini
Mulai dengan python dan python 2.6 3 anda dapat menggunakan bytearrays yang bisa berubah (dapat diubah elemen-bijaksana tidak seperti string):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
edit: Mengubah str untuk s
edit2: Sebagai Two-Bit Alchemist disebutkan di komentar, kode ini tidak bekerja dengan unicode.
Seperti yang orang lain katakan, umumnya Python string yang seharusnya berubah.
Namun, jika anda menggunakan CPython, pelaksanaan di python.org, adalah mungkin untuk menggunakan ctypes untuk memodifikasi string struktur dalam memori.
Berikut ini adalah contoh di mana saya menggunakan teknik ini untuk menghapus string.
https://stackoverflow.com/questions/982682/mark-data-as-sensitive-in-python/983525#983525
Saya menyebutkan hal ini demi kelengkapan, dan ini harus menjadi yang terakhir karena ini adalah hackish.
Kode ini bukan milikku. Saya tidak't ingat bentuk situs di mana, aku mengambilnya. Menariknya, anda dapat menggunakan ini untuk mengganti satu karakter atau lebih dengan satu atau lebih charectors. Meskipun jawaban ini sangat terlambat, pemula seperti saya (kapan saja) mungkin menemukan itu berguna.
mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,
Sebenarnya, dengan string, anda dapat melakukan sesuatu seperti ini:
oldStr = 'Hello World!'
newStr = ''
for i in oldStr:
if 'a' < i < 'z':
newStr += chr(ord(i)-32)
else:
newStr += i
print(newStr)
'HELLO WORLD!'
Pada dasarnya, saya'm "menambahkan"+"strings" bersama-sama ke dalam sebuah string baru :).