Modul Koleksi Python: Penghitung, ChainMap, Deque & Tuple

Diterbitkan: 2020-12-01

Modul Python Collections menawarkan sekumpulan tipe data container yang memperluas fitur container stock seperti Lists, Tuples, Sets, dan Dictionaries. Dengan wadah khusus ini, Anda tidak hanya memiliki fitur wadah persediaan, tetapi juga beberapa metode tambahan yang sangat berguna untuk tugas-tugas tertentu.

Pada akhir tutorial ini, Anda akan memiliki pengetahuan berikut:

  • Apa itu modul koleksi?
  • Berbagai fungsi seperti:
  1. Menangkal
  2. RantaiPeta
  3. Deque
  4. bernama Tuple
  • Contoh kerja

Modul Collections sudah diinstal sebelumnya dengan Python sehingga kita tidak perlu menginstalnya secara pip. Kami hanya dapat mengimpornya dan Anda siap untuk pergi! Mari kita masuk ke fungsi yang paling sering digunakan secara detail.

Belajar belajar ilmu data dari Universitas top Dunia. Dapatkan Program PG Eksekutif, Program Sertifikat Tingkat Lanjut, atau Program Magister untuk mempercepat karier Anda.

Wajib Dibaca: Aplikasi Python yang Menarik di Dunia Nyata

Daftar isi

Menangkal

Penghitung adalah fungsi yang paling mudah digunakan dan paling berguna dalam modul Koleksi. Counter adalah subclass dari kelas kamus di Python. Ini menghitung jumlah kemunculan setiap elemen dalam iterable (seperti string, tupel, daftar, dll.) dan menyimpannya dalam kamus. Kunci kamus adalah elemen unik dalam iterable dan nilainya adalah jumlah elemen tersebut.

Mari kita coba dengan beberapa contoh.

Impor koleksi
Marvel = 'Wolverine Jahat menindas Iron Man yang malang Wolverine yang buruk Iron Man yang malang'
Marvel_count = koleksi.Penghitung(Marvel.split())

#Keluaran:
Penghitung({ 'Buruk' : 3 ,
'Besi' : 2 ,
'Laki-laki' : 2 ,
'Miskin' : 2 ,
'Serigala' : 2 ,
'diganggu' : 1 })

Seperti yang kita lihat, ia menghitung kemunculan setiap elemen dan memasukkannya ke dalam kamus. Ini dapat digunakan dalam semua jenis iterable. Sekarang mari kita lihat semua metode yang dimilikinya.

Marvel_count[ 'Buruk' ]
#>> 3

Marvel_count.nilai()
#>> dict_values([3, 2, 1, 2, 2, 2])

Marvel_count.keys()
#>> dict_keys(['Buruk', 'Wolverine', 'diganggu', 'Besi', 'Pria', 'Miskin'])

Metode most_common(n) mengembalikan daftar n elemen paling umum yang disusun dalam urutan jumlah yang menurun.

Marvel_count.most_common( 2 )
#>> [('Buruk', 3), ('Serigala', 2)]

RantaiPeta

ChainMap digunakan untuk membuat tampilan tunggal dari banyak kamus sehingga dapat diakses dan diperbarui dari tampilan tunggal yaitu objek ChainMap itu sendiri. Perlu diingat bahwa ChainMaps ini hanya terdiri dari referensi ke kamus yang sebenarnya dan pembaruan juga dilakukan di kamus itu sendiri.

ChainMap adalah perpanjangan dari kelas kamus, jadi semua metode kamus didukung, ditambah beberapa metode tambahan yang akan kita bahas.

dic1 = { 'a' : 1 , 'b' : 2 }
dic2 = { 'b' : 3 , 'c' : 4 } Dic3 = { 'b' : 9 , 'd' : 4 }
chain1 = koleksi.ChainMap(dic2, dic1)
rantai1

Dalam kode di atas, kita mendefinisikan dua kamus dic1 dan dic2 dan meletakkannya di objek ChainMap.

#Keluaran:
ChainMap({ 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 })

Seperti yang kita lihat, dic2 'dirantai' dengan dic1 dalam urutan ini. Intinya, Anda bisa membayangkan dic2 terhubung ke dic1 seperti dic2–>dic1. Jadi ketika kita mencari kunci 'b' akan mencari di pemetaan pertama yaitu dic2 dan jika kunci tidak ditemukan maka akan menuju ke pemetaan berikutnya.

Oleh karena itu, urutan ChainMap penting untuk menentukan pemetaan mana yang dicari terlebih dahulu. Mari kita lihat itu dalam tindakan.

rantai1[ 'b' ]
#>> 3

Seperti yang kita lihat di atas ChainMap memiliki kunci 'b' di kedua kamus. Jadi ketika kita mencari kunci 'b', ia mencari di pemetaan pertama yaitu dic2 dan mengembalikan nilainya.

atribut peta

Atribut peta ChainMap mengembalikan daftar pemetaan dalam urutan pencarian, yaitu, dic2 adalah yang pertama di peta, sehingga akan dicari terlebih dahulu dan seterusnya.

chain1.maps
#>> [{'b': 3, 'c': 4}, {'a': 1, 'b': 2}]

Demikian pula, kita dapat memeriksa kunci dan nilai:

daftar(chain1.keys())
#>> ['a', 'c', 'b']

daftar(rantai1.nilai())
#>> [1, 4, 3]

Seperti yang kita lihat, hanya kunci unik yang ditampilkan dan nilainya juga.

anak_baru(m=Tidak ada)

Metode new_child() digunakan untuk menambahkan peta baru ke dalam ChainMap. Metode ini mengembalikan ChainMap baru dengan peta baru sebagai peta pertama diikuti oleh peta lainnya. Jika m ditentukan, itu menjadi peta pertama, jika tidak kamus kosong ditambahkan sebagai peta pertama.

rantai1.new_child(dic3)
chain1.maps

#Keluaran:
[{ 'b' : 9 , 'd' : 4 }, { 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }]

Seperti yang kita lihat, ia menambahkan dic3 di awal dan mengembalikan objek ChainMap baru.

terbalik

Anda mungkin bertanya-tanya bagaimana Anda dapat mengubah urutan ChainMap. Itu dapat dicapai dengan menggunakan fungsi terbalik yang mengembalikan iterator untuk iterasi melalui ChainMap dalam arah sebaliknya. Mari kita lihat ini dalam tindakan.

Kunci 'b' sekarang ada di semua peta. Peta pertama di ChainMap memiliki kunci 'b' dengan nilai 9.

rantai1[ 'b' ]
#>> 9

Mari kita lihat apa yang terjadi setelah kita melakukan iterasi ke arah sebaliknya.

chain1.maps = terbalik(chain1.maps)
rantai1[ 'b' ]
#>> 2

Perlu diingat, fungsi terbalik tidak benar-benar membalikkan pemetaan, itu hanya memberikan iterator terbalik.

Baca: Tutorial Python

Deque

Deque (diucapkan sebagai 'deck' ) adalah perpanjangan dari daftar, tetapi berakhir ganda. Deque adalah singkatan dari: Double Ended Queue karena kita dapat menghapus/meletakkan dan menambahkan elemen di kedua ujung Deques secara efisien tidak seperti daftar di mana semua operasi berada di sisi kanan.

deque(iterable, maxlen) menerima iterables dan mengembalikan objek deque. Mereka juga memiliki parameter maxlen yang menentukan batas atas jumlah elemen. Jika tidak ditentukan, deque dapat tumbuh tanpa batas. Mari kita lihat metode tajamnya.

deq = koleksi.deque([ 1 , 2 , 3 , 4 , 5 ], maxlen= 6 )
deq.appendleft( 8 )

#Keluaran:
deque([ 8 , 1 , 2 , 3 , 4 , 5 ])

Seperti yang kita lihat, memanggil metode appendleft menambahkan elemen di ujung kiri. Selain itu, karena kami telah menginisialisasinya dengan maxlen sebagai 6 yang telah dicapai sekarang, menambahkan elemen lain akan memunculkan "StopIterationError".

Jadi, mari kita hapus elemen paling kiri menggunakan popleft :

deq.popleft()
#>> 8

Kami juga dapat menghapus elemen tertentu berdasarkan nilai menggunakan hapus:

deq.hapus( 5 )
#>> deque([1, 2, 3, 4])

Catatan: memanggil metode remove dengan elemen yang tidak ada dalam deque akan memunculkan “ValueError”.

Kita dapat menyisipkan elemen apa pun pada indeks yang ditentukan menggunakan insert(index, element) .

deq.insert( 2 , 7 )
#>> deque([1, 2, 7, 3, 4])

Deque dapat dibalik dengan memanggil metode sebaliknya .

deq.reverse()
#>> deque([4, 3, 7, 2, 1])


Deque juga bisa diputar searah jarum jam atau berlawanan arah jarum jam menggunakan metode rotate .

#Searah jarum jamdeq.rotate( 2 )#>> deque([2, 1, 4, 3, 7])

#Berlawanan arah jarum jamdeq.rotate( -2 )#>> deque([4, 3, 7, 2, 1])

bernama Tuple

nametuple() adalah peningkatan besar dari objek Tuple biasa dengan Python. Named Tuples memungkinkan kita untuk mengindeks elemen berdasarkan namanya, bukan hanya posisinya. Anda dapat menganggap tupel bernama sebagai tabel dengan nama tabel sebagai nama tupel dan nama kolom sebagai nama indeks. Named Tuple pada dasarnya memberikan makna pada setiap elemen untuk akses yang lebih mudah dan kode yang lebih mudah dibaca.

Mari kita ambil beberapa contoh dan pahami cara kerjanya.

Kinerja = collections.namedtuple( 'Employee_Rating' , [ 'Q1' , 'Q2' , 'Q3' , 'Q4' ])

Dalam kode di atas, kami mendefinisikan objek Tuple Bernama "Kinerja" dengan nama "Peringkat_Karyawan" dengan nama bidang sebagai "Q1", "Q2", "Q3" dan "Q4" yang akan menyimpan peringkat triwulanan Karyawan. Mari kita buat 2 entri tuple bernama Employee_Rating.

rahul = Performa( 3 , 4 , 3.5 , 4.5 )
ankit = Kinerja( 4 , 4.5 , 4 , 4.5 )

#Keluaran:
Employee_Rating(Q1= 4 , Q2= 4.5 , Q3= 4 , Q4= 4.5 )
Employee_Rating(Q1= 3 , Q2= 4 , Q3= 3.5 , Q4= 4.5 )


Sekarang kita telah membuat 2 entri, kita dapat mengaksesnya dengan nama indeks.

ankit.Q1
#>> 4

ankit.Q3 > rahul.Q3
#>> Benar


Untuk menambahkan entri baru, atau membuat objek tuple bernama baru, kita dapat menggunakan metode _make() .

Milkha = Performa._make([ 4 , 5 , 5 , 4.5 ])
Milkha

#Keluaran:
Employee_Rating(Q1= 4 , Q2= 5 , Q3= 5 , Q4= 4.5 )

Kita dapat mengedit elemen dengan menggunakan metode _replace pada sembarang tuple bernama.

rahul._replace(Q1= 2 )

#Keluaran:
Employee_Rating(Q1= 2 , Q2= 4 , Q3= 3.5 , Q4= 4.5 )

Sebelum kamu pergi

Modul Collections memiliki beberapa fungsi yang lebih berguna seperti OrderedDict, defaultdict, UserList, UserString, UserDict. Pastikan Anda mendapatkan beberapa fungsi yang telah kita bahas dalam tutorial ini. Jenis wadah ini tidak hanya membuat hidup Anda lebih mudah, tetapi juga meningkatkan kualitas kode yang Anda tulis.

Jika Anda penasaran untuk belajar tentang python, ilmu data, lihat Program PG Eksekutif IIIT-B & upGrad dalam Ilmu Data yang dibuat untuk para profesional yang bekerja dan menawarkan 10+ studi kasus & proyek, lokakarya praktis, bimbingan dengan pakar industri , 1-on-1 dengan mentor industri, 400+ jam pembelajaran dan bantuan pekerjaan dengan perusahaan-perusahaan top.

Apa itu modul koleksi, dan apa kegunaannya?

Modul koleksi Python mendukung beberapa jenis wadah. Wadah adalah objek yang digunakan untuk menyimpan berbagai item dan memberikan sarana untuk mengambil dan mengulangi objek tertutup. Tuple, Daftar, Kamus, dan wadah bawaan lainnya tersedia. Selain itu, modul Collections memiliki tipe data container yang sangat terspesialisasi dan efisien seperti namedtuple(), deque, OrderedDict, counter, dan sebagainya yang jauh lebih unggul daripada container Python standar.

Apakah modul koleksi topik yang diperlukan untuk Python?

Ya, modul koleksi adalah topik yang diperlukan saat belajar Python. Menghitung objek, membuat antrian dan tumpukan, mengelola kunci yang hilang dalam kamus, dan banyak lagi semuanya dimungkinkan dengan modul koleksi Python. Tipe data dan kelas koleksi dibuat agar efisien dan Pythonic. Mereka cukup berharga untuk karir pemrograman Python Anda, jadi meluangkan waktu untuk belajar tentang modul koleksi ini sepadan dengan waktu dan usaha Anda. Wadah dalam modul Koleksi mungkin cukup bermanfaat untuk proyek dan model tingkat bisnis, menambahkan secara signifikan kegunaan wadah Python generik melalui peningkatan pengoptimalan dan kecepatan eksekusi.

Apa saja tipe data yang ada dalam Modul Koleksi?

Beberapa tipe data hadir dalam modul koleksi, seperti deque, defaultdict, namedtuple, OrderedDict, Counter, ChainMap, UserDict, UserList, UserString, dll. Tipe data ini dapat digunakan untuk berbagai alasan, seperti menambah dan menghapus item dari salah satu akhir urutan, membangun nilai default untuk kunci yang hilang, dan secara otomatis menambahkannya ke kamus. Tipe data ini juga dapat membantu dengan menyediakan bidang bernama yang memungkinkan mengakses item dengan nama sambil menjaga kemampuan untuk mengakses item dengan indeks, menghitung item unik dalam urutan atau iterable, dan memperlakukan beberapa pemetaan sebagai objek kamus tunggal, dll.