Rumah > pembangunan bahagian belakang > Tutorial Python > Apakah Cara Paling Cekap untuk Mengeluarkan Tanda Baca daripada Rentetan dalam Python?

Apakah Cara Paling Cekap untuk Mengeluarkan Tanda Baca daripada Rentetan dalam Python?

Mary-Kate Olsen
Lepaskan: 2024-12-26 06:30:27
asal
183 orang telah melayarinya

What's the Most Efficient Way to Remove Punctuation from Strings in Python?

Alih Keluar Tanda Baca daripada Rentetan: Pendekatan Optimum

Mengalih keluar tanda baca daripada rentetan ialah tugas biasa dalam banyak senario pengaturcaraan. Walaupun pelbagai kaedah wujud, memilih kaedah yang paling cekap boleh menjadi mencabar.

Kecekapan Tiada Tandingan: Terjemahan Rentetan

Untuk kecekapan maksimum, terjemahan rentetan berkuasa. Menggunakan s.translate(None, string.punctuation) memastikan operasi rentetan mentah dilakukan dalam C, memberikan kelajuan yang tiada tandingan. Untuk Python versi 3.9 dan ke atas, manfaatkan s.translate(str.maketrans('', '', string.punctuation)).

Pendekatan Alternatif untuk Senario Kritikal Bukan Prestasi

Jika kelajuan bukanlah perkara utama, pertimbangkan alternatif ini:

  • Set Pengecualian: Buat satu set aksara tanda baca dan kecualikannya daripada rentetan menggunakan set pemahaman (cth., ''.join(ch untuk ch dalam s jika ch tidak dalam kecualikan)).
  • Ungkapan Biasa: Gunakan ungkapan biasa untuk memadankan dan mengalih keluar aksara tanda baca (cth., regex.sub('', s), dengan regex ialah ungkapan biasa yang telah dikompilasi).

Perbandingan Prestasi

Untuk mengukur prestasi kaedah ini, kod berikut ialah dilaksanakan:

import re, string, timeit

s = "string. With. Punctuation"
exclude = set(string.punctuation)
table = string.maketrans("","")
regex = re.compile('[%s]' % re.escape(string.punctuation))

def test_set(s):
    return ''.join(ch for ch in s if ch not in exclude)

def test_re(s):
    return regex.sub('', s)

def test_trans(s):
    return s.translate(table, string.punctuation)

def test_repl(s):
    for c in string.punctuation:
        s=s.replace(c,"")
    return s

print "sets      :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000)
print "regex     :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000)
print "translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000)
print "replace   :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000)
Salin selepas log masuk

Hasilnya mendedahkan perkara berikut:

  • Terjemahan rentetan: 2.12455511093 saat
  • Ungkapan biasa: 6.86155414581 saat
  • Tetapkan pengecualian: 19.8566138744 saat
  • Penggantian 2 aksara.24:4:28 saat

Kesimpulan

Apabila mengoptimumkan kelajuan, terjemahan rentetan adalah pilihan yang tidak dipertikaikan. Untuk senario kurang intensif prestasi, pendekatan alternatif seperti pengecualian set atau ungkapan biasa boleh memberikan hasil yang memuaskan.

Atas ialah kandungan terperinci Apakah Cara Paling Cekap untuk Mengeluarkan Tanda Baca daripada Rentetan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan