Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pemahaman Senarai Lebih Cepat Daripada Senarai Menambah dalam Python?

Mengapa Pemahaman Senarai Lebih Cepat Daripada Senarai Menambah dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-10-28 16:58:29211semak imbas

Why Are List Comprehensions Faster Than List Appending in Python?

Mengapa Pemahaman Senarai Mengungguli Penambahan Senarai

Walaupun persepsi pemahaman senarai sebagai gula ekspresif semata-mata, mereka menunjukkan kelebihan kelajuan yang ketara berbanding lampiran senarai . Jurang ini melangkaui perbezaan ekspresif.

Untuk menggambarkan, pertimbangkan penanda aras masa berikut:

<code class="python">import timeit

time = timeit.timeit('t=[]\nfor i in range(10000):\n    t.append(i)', number=10000)
time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>

Hasilnya mendedahkan bahawa pemahaman senarai dilaksanakan kira-kira 50% lebih cepat daripada dilampirkan pada senarai.

Sebab Peningkatan Kelajuan

Kefahaman senarai mengeksploitasi beberapa pengoptimuman prestasi:

  • Penghapusan Pemuatan Atribut dan Panggilan Fungsi: Dalam lampiran senarai, setiap lelaran memerlukan memuatkan atribut tambah senarai dan menggunakan ia sebagai fungsi. Pemahaman senarai menghapuskan overhed ini dengan membuat senarai baharu atas permintaan.
  • Penggantungan dan Penyambungan Semula lwn. Penciptaan Senarai Segera: Menggantung dan menyambung semula bingkai fungsi biasanya lebih perlahan daripada membuat senarai atas permintaan secara terus .

Contoh

Pertimbangkan coretan kod berikut:

<code class="python">def f1():
    l = []                                    # Create a new list
    for i in range(5):                      # Iterate through a range
        l.append(i)                         # Append each number to the list

def f2():
    [i for i in range(5)]                  # Use list comprehension to create a new list</code>

Menyahpasang fungsi ini dengan modul dis mendedahkan perbezaan:

<code class="python">dis.dis(f1)
dis.dis(f2)</code>

Dalam f1, kami memerhatikan penciptaan senarai dan memuatkan serta memanggil atribut tambah (offset 18 dan 20). Walau bagaimanapun, dalam f2, operasi ini tiada, menghasilkan kod yang lebih cekap.

Kesimpulan

Kefahaman senarai mencapai prestasi yang lebih baik dengan menghapuskan pemuatan atribut, panggilan fungsi dan overhed yang berkaitan dengan penggantungan dan penyambungan semula bingkai fungsi. Akibatnya, mereka sering disyorkan untuk membuat senarai baharu yang kelajuan menjadi keutamaan.

Atas ialah kandungan terperinci Mengapa Pemahaman Senarai Lebih Cepat Daripada Senarai Menambah dalam Python?. 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