Kapan saya harus menggunakan kamus, daftar atau set?
Apakah ada skenario yang lebih cocok untuk setiap tipe data?
sumber
Kapan saya harus menggunakan kamus, daftar atau set?
Apakah ada skenario yang lebih cocok untuk setiap tipe data?
A list
tetap memesan, dict
dan set
jangan: ketika Anda peduli tentang pesanan, oleh karena itu, Anda harus menggunakan list
(jika pilihan wadah Anda terbatas pada tiga ini, tentu saja ;-).
dict
mengaitkan dengan masing-masing kunci suatu nilai, sementara list
dan set
hanya berisi nilai: kasus penggunaan yang sangat berbeda, jelas.
set
membutuhkan item yang dapat hashable, list
tidak: jika Anda memiliki item non-hashable, oleh karena itu, Anda tidak dapat menggunakan set
dan sebaliknya harus menggunakan list
.
set
melarang duplikat, list
tidak: juga perbedaan penting. ("Multiset", yang memetakan duplikat ke dalam penghitungan berbeda untuk item yang hadir lebih dari satu kali, dapat ditemukan di collections.Counter
- Anda dapat membuat satu sebagai dict
, jika karena alasan aneh Anda tidak dapat mengimpor collections
, atau, pada pra-2.7 Python sebagai a collections.defaultdict(int)
, menggunakan item sebagai kunci dan nilai terkait sebagai penghitungan).
Memeriksa keanggotaan nilai dalam set
(atau dict
, untuk kunci) sangat cepat (memakan waktu yang konstan dan singkat), sementara dalam daftar dibutuhkan waktu sebanding dengan panjang daftar dalam kasus rata-rata dan terburuk. Jadi, jika Anda memiliki item hashable, tidak peduli dengan cara apa pun tentang pemesanan atau duplikat, dan ingin pengecekan keanggotaan yang cepat, set
lebih baik daripada list
.
sumber
Saat Anda menginginkan koleksi elemen unik yang tidak diurut, gunakan a
set
. (Misalnya, ketika Anda ingin himpunan semua kata yang digunakan dalam dokumen).Saat Anda ingin mengumpulkan daftar elemen yang tidak dapat diubah, gunakan a
tuple
. (Misalnya, ketika Anda menginginkan pasangan (nama, nomor telepon) yang ingin Anda gunakan sebagai elemen dalam suatu set, Anda akan memerlukan sebuah tuple daripada daftar karena set membutuhkan elemen yang tidak dapat diubah).Saat Anda ingin mengumpulkan daftar elemen yang dapat diubah yang dapat diubah, gunakan a
list
. (Misalnya, ketika Anda ingin menambahkan nomor telepon baru ke daftar: [number1, number2, ...]).Saat Anda ingin pemetaan dari kunci ke nilai, gunakan a
dict
. (Misalnya, ketika Anda menginginkan buku telepon yang memetakan nama ke nomor telepon:){'John Smith' : '555-1212'}
. Perhatikan bahwa kunci-kunci dalam dict tidak berurutan. (Jika Anda beralih melalui dict (buku telepon), kunci (nama) dapat muncul dalam urutan apa pun).sumber
Gunakan kamus saat Anda memiliki satu set kunci unik yang memetakan ke nilai.
Gunakan daftar jika Anda memiliki koleksi barang yang dipesan.
Gunakan satu set untuk menyimpan satu set item yang tidak teratur.
sumber
Singkatnya, gunakan:
list
- jika Anda memerlukan urutan item yang dipesan.dict
- jika Anda perlu menghubungkan nilai dengan kunciset
- jika Anda perlu menyimpan elemen unik.Penjelasan detail
Daftar
Daftar adalah urutan yang bisa berubah, biasanya digunakan untuk menyimpan koleksi item yang homogen.
Daftar mengimplementasikan semua operasi urutan umum:
x in l
danx not in l
l[i]
,l[i:j]
,l[i:j:k]
len(l)
,min(l)
,max(l)
l.count(x)
l.index(x[, i[, j]])
- indeks kemunculan pertamax
inl
(pada atau setelahi
dan sebelumj
indeces)Daftar juga mengimplementasikan semua operasi urutan yang bisa berubah:
l[i] = x
- Itemi
daril
digantikan olehx
l[i:j] = t
- Sepotongl
darii
kej
digantikan oleh isi dari iterablet
del l[i:j]
- sama denganl[i:j] = []
l[i:j:k] = t
- elemenl[i:j:k]
digantikan oleh element
del l[i:j:k]
- menghapus elemen daris[i:j:k]
daftarl.append(x)
- ditambahkanx
ke akhir urutanl.clear()
- menghapus semua item daril
(sama dengan dell[:]
)l.copy()
- membuat salinan dangkall
(sama sepertil[:]
)l.extend(t)
ataul += t
- meluasl
dengan isit
l *= n
- Pembaruanl
dengan isinya berulangn
kalil.insert(i, x)
- menyisipkanx
ke dalaml
pada indeks yang diberikan olehi
l.pop([i])
- mengambil item dii
dan juga menghilangkannyal
l.remove(x)
- hapus item pertama daril
tempatl[i]
yang sama dengan xl.reverse()
- membalikkan iteml
di tempatDaftar dapat digunakan sebagai tumpukan dengan memanfaatkan metode
append
danpop
.Kamus
Kamus memetakan nilai hashable ke objek arbitrer. Kamus adalah objek yang bisa berubah. Operasi utama pada kamus adalah menyimpan nilai dengan beberapa kunci dan mengekstraksi nilai yang diberikan kunci.
Dalam kamus, Anda tidak dapat menggunakan sebagai nilai kunci yang tidak dapat hashable, yaitu nilai yang berisi daftar, kamus, atau jenis yang bisa berubah-ubah lainnya.
Set
Satu set adalah kumpulan objek hashable berbeda yang tidak berurutan. Satu set umumnya digunakan untuk memasukkan pengujian keanggotaan, menghapus duplikat dari urutan, dan menghitung operasi matematika seperti persimpangan, gabungan, perbedaan, dan perbedaan simetris.
sumber
Meskipun ini tidak mencakup
set
s, ini adalah penjelasan yang baik tentangdict
s danlist
s:http://www.sthurlow.com/python/lesson06/
sumber
Untuk C ++ saya selalu mengingat diagram alur ini: Di skenario mana saya menggunakan wadah STL tertentu? , jadi saya ingin tahu apakah sesuatu yang serupa juga tersedia untuk Python3, tetapi saya tidak beruntung.
Yang perlu Anda ingat untuk Python adalah: Tidak ada standar Python tunggal untuk C ++. Oleh karena itu mungkin ada perbedaan besar untuk penafsir Python yang berbeda (misalnya CPython, PyPy). Diagram alur berikut adalah untuk CPython.
Selain itu saya tidak menemukan cara yang baik untuk menggabungkan struktur data berikut ke diagram:
bytes
,byte arrays
,tuples
,named_tuples
,ChainMap
,Counter
, danarrays
.OrderedDict
dandeque
tersedia melaluicollections
modul.heapq
tersedia dariheapq
modulLifoQueue
,,Queue
danPriorityQueue
tersedia melaluiqueue
modul yang dirancang untuk akses bersamaan (utas). (Ada juga yangmultiprocessing.Queue
tersedia tetapi saya tidak tahu perbedaannyaqueue.Queue
tetapi akan menganggap bahwa itu harus digunakan ketika akses bersamaan dari proses diperlukan.)dict
,set
,frozen_set
, Danlist
yang builtin tentu sajaBagi siapa pun saya akan berterima kasih jika Anda dapat meningkatkan jawaban ini dan memberikan diagram yang lebih baik di setiap aspek. Merasa bebas dan selamat datang.
PS: diagram sudah dibuat dengan yed. File graphml ada di sini
sumber
Dalam kombinasi dengan daftar , dikt dan set , ada juga objek python lain yang menarik, OrderedDicts .
OrderedDicts bisa berguna ketika Anda perlu mempertahankan urutan kunci, misalnya bekerja dengan dokumen: Biasanya diperlukan representasi vektor dari semua istilah dalam dokumen. Jadi menggunakan OrderedDicts Anda dapat memverifikasi secara efisien jika suatu istilah telah dibaca sebelumnya, menambahkan istilah, mengekstrak istilah, dan setelah semua manipulasi Anda dapat mengekstraksi representasi vektor yang diurutkan dari mereka.
sumber
Daftar adalah apa yang tampak - daftar nilai. Masing-masing dari mereka diberi nomor, mulai dari nol - yang pertama diberi nomor nol, yang pertama 1, yang kedua 2, dll. Anda dapat menghapus nilai dari daftar, dan menambahkan nilai baru ke akhir. Contoh: Banyak nama kucing Anda.
Tuples seperti daftar, tetapi Anda tidak dapat mengubah nilainya. Nilai-nilai yang Anda berikan pertama, adalah nilai-nilai yang Anda terjebak dengan untuk sisa program. Sekali lagi, setiap nilai diberi nomor mulai dari nol, untuk referensi yang mudah. Contoh: nama-nama bulan dalam setahun.
Kamus mirip dengan yang disarankan namanya - kamus. Dalam kamus, Anda memiliki 'indeks' kata-kata, dan untuk masing-masing definisi. Dalam python, kata tersebut disebut 'kunci', dan definisi adalah 'nilai'. Nilai-nilai dalam kamus tidak bernomor - mirip dengan apa yang namanya - kamus. Dalam kamus, Anda memiliki 'indeks' kata-kata, dan untuk masing-masing definisi. Dalam python, kata tersebut disebut 'kunci', dan definisi adalah 'nilai'. Nilai-nilai dalam kamus tidak diberi nomor - mereka tidak dalam urutan tertentu, baik - kunci melakukan hal yang sama. Anda dapat menambah, menghapus, dan mengubah nilai-nilai dalam kamus. Contoh: buku telepon.
sumber
Saat menggunakannya, saya membuat cheatsheet lengkap dari metode mereka untuk referensi Anda:
sumber
Kamus: Kamus python digunakan seperti tabel hash dengan kunci sebagai indeks dan objek sebagai nilai.
Daftar: Daftar digunakan untuk menyimpan objek dalam array yang diindeks oleh posisi objek dalam array.
Set: Set adalah kumpulan dengan fungsi yang dapat mengetahui apakah suatu objek ada atau tidak ada dalam set.
sumber