Jawaban:
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
.
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).
Singkatnya, gunakan:
list
- jika Anda memerlukan urutan item yang dipesan.
dict
- jika Anda perlu menghubungkan nilai dengan kunci
set
- jika Anda perlu menyimpan elemen unik.
Daftar adalah urutan yang bisa berubah, biasanya digunakan untuk menyimpan koleksi item yang homogen.
Daftar mengimplementasikan semua operasi urutan umum:
x in l
dan x 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 pertama x
in l
(pada atau setelah i
dan sebelum j
indeces)Daftar juga mengimplementasikan semua operasi urutan yang bisa berubah:
l[i] = x
- Item i
dari l
digantikan olehx
l[i:j] = t
- Sepotong l
dari i
ke j
digantikan oleh isi dari iterablet
del l[i:j]
- sama dengan l[i:j] = []
l[i:j:k] = t
- elemen l[i:j:k]
digantikan oleh element
del l[i:j:k]
- menghapus elemen dari s[i:j:k]
daftarl.append(x)
- ditambahkan x
ke akhir urutanl.clear()
- menghapus semua item dari l
(sama dengan del l[:]
)l.copy()
- membuat salinan dangkal l
(sama seperti l[:]
)l.extend(t)
atau l += t
- meluas l
dengan isit
l *= n
- Pembaruan l
dengan isinya berulang n
kalil.insert(i, x)
- menyisipkan x
ke dalam l
pada indeks yang diberikan olehi
l.pop([i])
- mengambil item di i
dan juga menghilangkannyal
l.remove(x)
- hapus item pertama dari l
tempat l[i]
yang sama dengan xl.reverse()
- membalikkan item l
di tempatDaftar dapat digunakan sebagai tumpukan dengan memanfaatkan metode append
dan pop
.
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.
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.
Meskipun ini tidak mencakup set
s, ini adalah penjelasan yang baik tentang dict
s dan list
s:
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.
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. 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.
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
, dan arrays
.
OrderedDict
dan deque
tersedia melalui collections
modul.heapq
tersedia dari heapq
modulLifoQueue
,, Queue
dan PriorityQueue
tersedia melalui queue
modul yang dirancang untuk akses bersamaan (utas). (Ada juga yang multiprocessing.Queue
tersedia tetapi saya tidak tahu perbedaannya queue.Queue
tetapi akan menganggap bahwa itu harus digunakan ketika akses bersamaan dari proses diperlukan.)dict
, set
, frozen_set
, Dan list
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
Dalam kombinasi dengan daftar , dikt dan set , ada juga objek python lain yang menarik, OrderedDicts .
Kamus yang dipesan sama seperti kamus biasa tetapi mereka ingat urutan item dimasukkan. Ketika mengulangi kamus yang dipesan, item dikembalikan sesuai urutan kunci mereka pertama kali ditambahkan.
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.
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.
Saat menggunakannya, saya membuat cheatsheet lengkap dari metode mereka untuk referensi Anda:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}
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.