Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penggabungan Rentetan dalam Python: Adakah Terdapat Cara Lebih Cepat untuk Menambah Rentetan?

Penggabungan Rentetan dalam Python: Adakah Terdapat Cara Lebih Cepat untuk Menambah Rentetan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 04:08:28972semak imbas

String Concatenation in Python: Is There a Faster Way to Append Strings?

Menggabungkan Rentetan dalam Python: Pendekatan Cekap

Soalan: Bagaimanakah saya boleh menambahkan satu rentetan ke rentetan yang lain dengan cekap dalam Python? Adakah terdapat alternatif yang lebih pantas untuk kod berikut?

<code class="python">var1 = "foo"
var2 = "bar"
var3 = var1 + var2</code>

Jawapan:

CPython, pelaksanaan Python utama, kini mengoptimumkan gabungan rentetan dengan cuba memanjangkan rentetan di tempat apabila hanya satu rujukan kepada rentetan hadir. Pengoptimuman ini menghasilkan kerumitan masa O(n) terlunas.

Sebagai contoh, kod berikut:

<code class="python">s = ""
for i in range(n):
    s += str(i)</code>

yang dahulunya mempunyai kerumitan masa O(n^2), ialah sekarang O(n).

Butiran Teknikal:

Dalam pelaksanaan CPython, fungsi _PyBytes_Resize bertanggungjawab untuk pengoptimuman ini. Ia membenarkan saiz semula rentetan tanpa mencipta objek baharu, dengan syarat hanya satu modul merujuk rentetan asal.

Analisis Prestasi:

Ujian empirikal menunjukkan peningkatan prestasi yang ketara untuk operasi penggabungan rentetan:

String Size Concatenation Time (CPython)
10 1.85 usec
100 16.8 usec
1,000 158 usec
10,000 1.71 msec
100,000 14.6 msec
1,000,000 173 msec

Nota Penting:

Pengoptimuman ini khusus untuk CPython dan mungkin tidak terdapat dalam pelaksanaan Python lain, seperti PyPy atau Jython . Dalam kes ini, prestasi penggabungan rentetan mungkin berbeza daripada pelaksanaan CPython.

Atas ialah kandungan terperinci Penggabungan Rentetan dalam Python: Adakah Terdapat Cara Lebih Cepat untuk Menambah 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