Dalam Python, struktur data mana yang lebih efisien / cepat? Dengan asumsi bahwa pesanan tidak penting bagi saya dan saya akan tetap memeriksa duplikatnya, apakah Python set lebih lambat dari daftar Python?
python
list
performance
data-structures
set
Mantas Vidutis
sumber
sumber
Daftar sedikit lebih cepat daripada yang ditetapkan ketika Anda hanya ingin mengulangi nilai.
Namun, set secara signifikan lebih cepat daripada daftar jika Anda ingin memeriksa apakah suatu item terkandung di dalamnya. Mereka hanya dapat berisi barang-barang unik.
Ternyata tuple berkinerja hampir sama persis dengan daftar, kecuali untuk keabadiannya.
Iterasi
Tentukan apakah suatu benda ada
sumber
Daftar kinerja:
Setel kinerja:
Anda mungkin ingin mempertimbangkan Tuples karena mirip dengan daftar tetapi tidak dapat dimodifikasi. Mereka mengambil sedikit lebih sedikit memori dan lebih cepat untuk diakses. Mereka tidak fleksibel tetapi lebih efisien daripada daftar. Penggunaan normal mereka adalah untuk berfungsi sebagai kunci kamus.
Set juga struktur urutan tetapi dengan dua perbedaan dari daftar dan tupel. Meskipun set memang memiliki perintah, perintah itu sewenang-wenang dan tidak di bawah kendali programmer. Perbedaan kedua adalah bahwa elemen-elemen dalam himpunan harus unik.
set
Menurut definisi. [ python | wiki ].sumber
set
tautan tipe bawaan ( docs.python.org/2/library/stdtypes.html#set ) bukansets
pustaka yang sudah usang . Kedua, "Set juga merupakan struktur urutan", baca yang berikut dari tautan tipe bawaan: "Menjadi koleksi yang tidak terurut, set tidak mencatat posisi elemen atau urutan penyisipan. Dengan demikian, set tidak mendukung pengindeksan, pengirisan, atau lainnya. perilaku seperti urutan. "range
tidaklist
.range
adalah kelas khusus dengan__contains__
metode sulap khusus .xrange
)Set
menang karena cek 'berisi' hampir instan: https://en.wikipedia.org/wiki/Hash_tableDaftar implementasi: biasanya sebuah array, level rendah dekat dengan logam, baik untuk iterasi dan akses acak dengan indeks elemen.
Atur implementasi: https://en.wikipedia.org/wiki/Hash_table , ia tidak mengulangi pada daftar, tetapi menemukan elemen dengan menghitung hash dari kunci, jadi itu tergantung pada sifat elemen kunci dan hash fungsi. Mirip dengan apa yang digunakan untuk dict. Saya menduga
list
bisa lebih cepat jika Anda memiliki sangat sedikit elemen (<5), semakin besar elemen menghitung semakin baikset
kinerjanya untuk cek berisi. Ini juga cepat untuk penambahan dan penghapusan elemen. Juga selalu ingat bahwa membangun set memiliki biaya!CATATAN : Jika
list
sudah diurutkan, pencarianlist
bisa sangat cepat, tetapi untuk kasus biasa aset
lebih cepat dan lebih mudah untuk berisi cek.sumber
tl; dr
Struktur data (DS) penting karena mereka digunakan untuk melakukan operasi pada data yang pada dasarnya menyiratkan: mengambil beberapa input , memprosesnya , dan memberikan kembali output .
Beberapa struktur data lebih bermanfaat daripada yang lain dalam beberapa kasus tertentu. Oleh karena itu, sangat tidak adil untuk bertanya (DS) mana yang lebih efisien / cepat. Ini seperti menanyakan alat mana yang lebih efisien antara pisau dan garpu. Maksud saya semua tergantung situasi.
Daftar
Daftar adalah urutan yang dapat berubah , biasanya digunakan untuk menyimpan koleksi item yang homogen .
Set
Objek yang ditetapkan adalah kumpulan objek hashable berbeda yang tidak berurutan . Biasanya digunakan untuk menguji keanggotaan, menghapus duplikat dari urutan, dan menghitung operasi matematika seperti persimpangan, gabungan, perbedaan, dan perbedaan simetris.
Pemakaian
Dari beberapa jawaban, jelas bahwa daftar lebih cepat daripada satu set ketika mengulangi nilai-nilai. Di sisi lain, satu set lebih cepat dari daftar ketika memeriksa apakah suatu item terkandung di dalamnya. Oleh karena itu, satu-satunya hal yang dapat Anda katakan adalah bahwa daftar lebih baik daripada satu set untuk beberapa operasi tertentu dan sebaliknya.
sumber
Saya tertarik pada hasil ketika memeriksa, dengan CPython, jika nilainya adalah salah satu dari sejumlah kecil literal.
set
menang dalam Python 3 vstuple
,list
danor
:Keluaran:
Untuk 3 hingga 5 liter,
set
masih menang dengan selisih yang lebar, danor
menjadi yang paling lambat.Dalam Python 2,
set
selalu yang paling lambat.or
adalah tercepat selama 2 sampai 3 literal, dantuple
danlist
lebih cepat dengan 4 atau lebih literal. Aku tidak bisa membedakan kecepatantuple
vslist
.Ketika nilai-nilai untuk menguji di-cache dalam variabel global di luar fungsi, alih-alih membuat literal dalam loop,
set
dimenangkan setiap waktu, bahkan dalam Python 2.Hasil ini berlaku untuk 64-bit CPython pada Core i7.
sumber
Saya akan merekomendasikan implementasi Set di mana use case terbatas untuk referensi atau mencari keberadaan dan implementasi Tuple di mana use case mengharuskan Anda untuk melakukan iterasi. Daftar adalah implementasi tingkat rendah dan membutuhkan overhead memori yang signifikan.
sumber
Output setelah membandingkan 10 iterasi untuk semua 3: Perbandingan
sumber
Set lebih cepat, lebih dari itu Anda mendapatkan lebih banyak fungsi dengan set, seperti katakanlah Anda memiliki dua set:
Kami dapat dengan mudah bergabung dengan dua set:
Cari tahu apa yang sama pada keduanya:
Cari tahu apa yang berbeda dari keduanya:
Dan banyak lagi! Coba saja, mereka menyenangkan! Terlebih lagi jika Anda harus mengerjakan nilai yang berbeda dalam 2 daftar atau nilai umum dalam 2 daftar, saya lebih suka mengonversi daftar Anda menjadi set, dan banyak programmer melakukannya dengan cara itu. Semoga ini bisa membantu Anda :-)
sumber