Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menggantikan Berbilang Aksara dengan Cekap dalam Rentetan?

Bagaimana untuk Menggantikan Berbilang Aksara dengan Cekap dalam Rentetan?

DDD
DDDasal
2024-12-02 02:52:10982semak imbas

How to Efficiently Replace Multiple Characters in a String?

Kaedah Terbaik untuk Menggantikan Berbilang Aksara dalam Rentetan

Soalan Asal:
Bagaimanakah saya boleh menggantikan berbilang aksara dalam rentetan dengan cekap, seperti & -> &, # -> #, dsb.?

Pendekatan Pertama (Penggantian Berurutan)

Sementara kod yang disediakan berfungsi, ia melibatkan beberapa penggantian berurutan, yang mungkin tidak cekap.

strs = strs.replace('&', '\&')
strs = strs.replace('#', '\#')
...

Kedua Pendekatan (Penggantian Rantaian)

Pendekatan yang lebih cekap ialah merantai bersama penggantian.

text.replace('&', '\&').replace('#', '\#')

Perbandingan Prestasi

Ujian: Gantikan aksara & dan # dalam rentetan abc&def#ghi.

Method Time (μs per loop)
Chaining replacements 0.814

Alternatif Kaedah

Pelbagai kaedah lain tersedia untuk menggantikan aksara dalam rentetan:

Menggunakan Regex

import re

rx = re.compile('([&#])')
text = rx.sub(r'\', text)

Menggunakan Fungsi Melarikan Diri Tersuai

def mk_esc(esc_chars):
    return lambda s: ''.join(['\' + c if c in esc_chars else c for c in s])
esc = mk_esc('&#')
text = esc(text)

Menggunakan Gelung

chars = "&#"
for c in chars:
    text = text.replace(c, "\" + c)

Petua Tambahan

Optimumkan untuk Kelajuan (~2x Penambahbaikan)

Daripada menyemak kewujudan setiap aksara dalam rentetan input, gunakan lelaran untuk menggelungkan aksara yang akan diganti. Ini boleh meningkatkan prestasi dengan ketara.

Gunakan Python 3

Python 3 mengatasi Python 2 dalam tugas penggantian aksara kerana keupayaan manipulasi rentetan yang lebih pantas.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Berbilang Aksara dengan Cekap dalam Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn