Apa cara termudah dalam Python untuk mengganti karakter dalam string?
Sebagai contoh:
text = "abcdefg";
text[1] = "Z";
^
Jangan modifikasi string.
Bekerja dengan mereka sebagai daftar; mengubahnya menjadi string hanya saat dibutuhkan.
>>> 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'
String python tidak dapat diubah (artinya tidak dapat dimodifikasi). Ada banyak alasan untuk ini. Gunakan daftar sampai Anda tidak punya pilihan, hanya kemudian mengubahnya menjadi string.
MID
karena irisan:s[:index] + c + s[index+1:]
Metode tercepat?
Ada tiga cara. Untuk pencari kecepatan saya sarankan 'Metode 2'
Metode 1
Diberikan oleh jawaban ini
Yang cukup lambat dibandingkan dengan 'Metode 2'
Metode 2 (METODE CEPAT)
Diberikan oleh jawaban ini
Yang jauh lebih cepat:
Metode 3:
Array byte:
sumber
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
dua kali lebih lambat dari yang tercepat.sumber
String python tidak dapat diubah, Anda mengubahnya dengan membuat salinan.
Cara termudah untuk melakukan apa yang Anda inginkan mungkin:
The
text[1:]
return string dalamtext
dari posisi 1 sampai akhir, posisi menghitung dari 0 sehingga '1' adalah karakter kedua.sunting: Anda dapat menggunakan teknik mengiris string yang sama untuk setiap bagian dari string
Atau jika surat itu hanya muncul setelah Anda dapat menggunakan teknik pencarian dan ganti yang disarankan di bawah ini
sumber
Dimulai dengan python 2.6 dan python 3 Anda dapat menggunakan bytearrays yang bisa berubah-ubah (dapat diubah elemen-bijaksana seperti string):
edit: Mengubah str ke s
sunting2: Seperti Alchemist Dua-Bit yang disebutkan dalam komentar, kode ini tidak bekerja dengan unicode.
sumber
bytearray(s)
, bukanbytearray(str)
. Untuk yang lain, ini akan menghasilkan:TypeError: string argument without an encoding
. Jika Anda menentukan penyandian, maka Anda mendapatkanTypeError: an integer is required
. Itu dengan unicode Python 3 atau Python 2. Jika Anda melakukan ini di Python 2 (dengan baris kedua yang diperbaiki), itu tidak akan berfungsi untuk karakter non-ASCII karena mereka mungkin tidak hanya satu byte. Cobalahs = 'Héllo'
dan Anda akan mendapatkannya'He\xa9llo'
.s = u'abcdefg'
.Seperti orang lain katakan, umumnya string Python seharusnya tidak berubah.
Namun, jika Anda menggunakan CPython, implementasinya di python.org, dimungkinkan untuk menggunakan ctypes untuk memodifikasi struktur string dalam memori.
Berikut adalah contoh di mana saya menggunakan teknik ini untuk menghapus string.
Tandai data sebagai sensitif dalam python
Saya menyebutkan ini demi kelengkapan, dan ini harus menjadi pilihan terakhir Anda karena peretasan.
sumber
str
bukan jenis yang tepat untuk Anda. Hanya saja, jangan menggunakannya. Gunakan sesuatu sepertibytearray
sebagai gantinya. (Lebih baik lagi, bungkus dengan sesuatu yang memungkinkan Anda memperlakukannya kurang lebih sebagai data buram sehingga Anda benar - benar tidak dapat mengambilnyastr
, untuk melindungi Anda dari kecelakaan. Mungkin ada perpustakaan untuk itu. Tidak ada perpustakaan.)Kode ini bukan milikku. Saya tidak dapat mengingat bentuk situs di mana, saya membawanya. Menariknya, Anda dapat menggunakan ini untuk mengganti satu karakter atau lebih dengan satu atau lebih karakter. Meskipun balasan ini sangat terlambat, pemula seperti saya (kapan saja) mungkin merasa bermanfaat.
Ubah fungsi Teks.
sumber
l
.mytext = mytext.replace('l', 'W')
->HeWWo Zorld
mytext = mytext.replace('l', 'W',1)
. Tautan ke docSebenarnya, dengan string, Anda dapat melakukan sesuatu seperti ini:
Pada dasarnya, saya "menambahkan" + "string" menjadi string baru :).
sumber
jika dunia Anda 100%
ascii/utf-8
(banyak kasus penggunaan cocok di dalam kotak itu):python 3.7.3
sumber
Saya ingin menambahkan cara lain untuk mengubah karakter dalam sebuah string.
Seberapa cepat jika dibandingkan dengan mengubah string menjadi daftar dan mengganti nilai h lalu bergabung kembali ?.
Mendaftar pendekatan
Solusi saya
sumber