rangkuman buku Python Data Structures and Algorithms chapter 2

Jenis Data Python dan Struktur

 Di bab ini, kita akan melihat tipe data Python secara mendetail Seringkali kita menginginkan objek yang lebih khusus untuk mewakili data kita. Pertama, kita akan membahas beberapa operasi dan ekspresi yang umum untuk semua tipe data.

Operasi dan ekspresi 

Ada sejumlah operasi yang sama untuk semua ttipe data. Misalnya, semua data jenis, dan umumnya semua objek, dapat diuji untuk nilai kebenaran dengan cara tertentu. Pengikut adalah nilai-nilai yang dianggap python FALSE : 
  • The none type
  • false
  • bilangan bulat, float, nol kompleks
  • Urutan atau pemetaan kosong
  • Sebuah intance dari kelas yang ditentukan pengguna yang mendefinisikan __len__ atau __bool__()
  • metode yang mengembalikan nol atau false 
semua nilai lainnya dianggap benar.


Operasi boolean 

Operasi Boolean mengembalikan nilai lebih dari True atau False. Operasi Boolean diurutkan berdasarkan prioritas, jadi jika lebih dari satu operasi Boolean terjadi dalam sebuah ekspresi, operasi dengan prioritas tertinggi akan terjadi terlebih dahulu. Tabel berikut menguraikan ketiganyaOperasi Boolean mengembalikan nilai lebih dari True atau False. Operasi Boolean diurutkan berdasarkan prioritas, jadi jika lebih dari satu operasi Boolean terjadi dalam sebuah ekspresi, operasi dengan prioritas tertinggi akan terjadi terlebih dahulu. Tabel berikut menguraikan ketiganya

operasi Operator Example

example 

not

Returns True if x is False; returns False otherwise.

x and

Returns True if both x and y are True; returns False otherwise.

x or

Returns True if either x or y is True; returns False otherwise.


Baik operator dan maupun operator atau menggunakan «hubungan pendek» saat mengevaluasi ekspresi. Ini berarti Python hanya akan mengevaluasi operator jika perlu. Misalnya, jika x Benar maka dalam ekspresi x atau y, y tidak dievaluasi karena ekspresi tersebut jelas Benar. Dengan cara yang sama, dalam ekspresi x dan y di mana x adalah False, interpreter hanya akan mengevaluasi x dan mengembalikan False, tanpa mengevaluasi y. 

Operator Perbandingan dan Aritmatika 

Operator aritmatika standar  (+, -, *, /)bekerja dengan semua tipe numerik Python . Operator // memberikan hasil bagi integer`` operator eksponen adalah x ** y, dan operator modulus, yang diberikan oleh a% b, mengembalikan sisa pembagian a / b . Operator perbandingan bekerja dengan angka, string, daftar, dan objek koleksi lainnya dan mengembalikan True jika kondisi berlaku
True jika setiap objek koleksi secara struktural setara, dan nilai setiap elemen identik. 

Keanggotaan, identitas, dan operasi logis

Operator keanggotaan menguji variabel secara berurutan, seperti daftar atau string melakukan apa yang Anda harapkan, x in y mengembalikan True jika variabel x ditemukan di y. Operator is membandingkan identitas objek. Sebagai contoh, berikut cuplikan menunjukkan kontras kesetaraan dengan identitas objek:

in   [11] : x = [1,2,3] ; y = [1,2,3]

in   [12] : x == y #equivalence

out [12] : True 

in   [13] : x is y #object identity

out [13] : False

in   [14] : x= y #assigment

in   [15] : x is y

 out [15] : True 


Tipe data bawaan 

Setiap nilai dalam Python memiliki tipe dataTidak seperti banyak bahasa pemrograman, dengan Python Anda tidak perlu mendeklarasikan tipe variabel secara eksplisit . Python melacak tipe objek secara internal.

Tipe data bawaa python diuraikan dalam tabel berikut : 


Category 

Name 

Description

None 

None 

The null object.

Numeric 

int 

Integer.


float 

Floating point number.


complex 

Complex number.


bool 

Boolean (True, False).

Sequences 

str 

String of characters.


list 

List of arbitrary objects.


Tuple 

Group of arbitrary items.


range 

Creates a range of integers.

Mapping 

dict 

Dictionary of key-value pairs.


set 

Mutable, unordered collection of unique items.


frozenset 

Immutable set.


None Type

Jenis None tidak dapat diubah dan memiliki satu nilai, None. Ini digunakan untuk mewakili tidak adanya nilai. Ini dikembalikan oleh objek yang tidak secara eksplisit mengembalikan nilai dan mengevaluasi ke False dalam ekspresi Boolean. Ini sering digunakan sebagai nilai default dalam argumen opsional untuk memungkinkan fungsi mendeteksi apakah pemanggil telah meneruskan nilai.

Tipe numerik 

Semua tipe numerik, selain bool, ditandatangani dan semuanya tidak dapat diubah. Boolean memiliki dua kemungkinan nilai, True dan False. Nilai-nilai ini masing-masing dipetakan ke 1 dan 0.
Tipe integer, int, merepresentasikan bilangan bulat dari rentang tak terbatas. Angka floating point diwakili oleh representasi floating point presisi ganda asli dari mesin. Bilangan kompleks diwakili oleh dua bilangan floating point. Mereka ditugaskan menggunakan operator j untuk menandakan bagian imajiner dari bilangan kompleks, misalnya:
 a = 2 + 3j

kita dapat mengakses bagian nyata dan imajiner masing-masing denga a.real dan a.imag.

Representation error

Perlu dicatat bahwa representasi presisi ganda asli dari bilangan floating point mengarah ke beberapa hasil yang tidak terduga :
in   [14] : 1-0.9
out [14] : 0.9999999999999998

in   [15] : 1-0.9 ==0.1
out [15] : False

Ini adalah hasil dari fakta bahwa sebagian besar pecahan desimal tidak dapat direpresentasikan secara tepat sebagai pecahan biner, yang merupakan cara sebagian besar perangkat keras yang mendasari merepresentasikan bilangan floating point
Untuk algoritme atau aplikasi yang mungkin menjadi masalah, Python menyediakan modul desimal . Modul ini memungkinkan representasi yang tepat dari bilangan desimal dan memfasilitasi properti kontrol yang lebih besar seperti perilaku pembulatan, jumlah digit signifikan, dan presisi.

in   [1]: import decimal
in   [2]: x = decimal.decimal(3.14); y = decimal.decimal(2.74)
in   [3]: x*y
out [3]: decimal('8.603600000000001010036498883') 
in   [4]: decimal.getcontext().prec = 4
in   [5]: x*y
out [5]: decimal('8.604') 

Di sini kita telah membuat konteks global dan menyetel presisi ke 4. Objek Desimal dapat diperlakukan sama seperti Anda memperlakukan int atau float. Mereka tunduk pada semua operasi matematika yang sama dan dapat digunakan sebagai kunci kamus, ditempatkan dalam set, dan seterusnya. Selain itu, objek Desimal juga memiliki beberapa metode operasi matematika, seperti eksponen natural, x.exp, logaritma natural, x.ln, dan logaritma basis 10, x.log10.
Python juga memiliki modul pecahan yang mengimplementasikan tipe bilangan rasional. contoh berikut menunjukkan beberapa cara membuat pecahan :

in   [62]: import fractions
in   [63]: fractions.fraction(3,4) #creates the fraction 3/4
out [63]: fraction(3,4)
in   [64]: fraction.fraction(0,5) #creates a fraction from a float
out [64]: fraction(1,2)
in   [65]: fractions.fraction(".25") #creates a fraction from a string
out [65]: fraction(1,4)

Perlu juga disebutkan di sini ekstensi NumPy. Ini memiliki tipe untuk objek matematika seperti array, vektor, dan matriks, dan kemampuan untuk aljabar linier, kalkulasi transformasi Fourier, vektor eigen, operasi logika, dan banyak lagi.

 Urutan 

Urutan adalah kumpulan objek yang diindeks oleh bilangan bulat non-negatif . List dan tuple adalah urutan objek sembarang, string adalah urutan karakter .Untuk semua urutan, operator pengindeksan dan pemotongan berlaku seperti yang dijelaskan di bab sebelumnya .
semua urutan memiliki metode berikut :
 

Method 

Description

len(s) 

Number of elements in s

min(s, [,default=obj, 

key=func])

The minimum value in s (alphabetically for strings)

max(s, [,default=obj, 

key=func])

Maximum value in s (alphabetically for strings)

sum(s,[,start=0]) 

The sum of the elements (returns TypeError if s is not numeric)

all(s) 

Returns True if all elements in s are True (that is, not 0, False, or Null)

any(s) 

Checks whether any item in s is True



Selain itu, semua urutan mendukung operasi berikut :

Operation 

Description

s + r 

Concatenates two sequences of the same type

s * n 

Make n copies of s, where n is an integer

v1, v2 ..., vn = s 

Unpacks n variables from s to v1, v2, and so on

s[i] 

Indexing-returns element i of s

s[i:j:stride] 

Slicing returns elements between i and j with optional stride

x in s 

Returns True if element x is in s

x not in s 

Returns true if element x is not in s


Turtle 

tupel adalah urutan objek arbitrer yang tidak dapat di ubah. Tuple adalah hashable, yang berarti kita dapat mengurutkan daftar mereka dan mereka dapat digunakan sebagai kunci kamus. 

tpl= ('a', 'b', 'c')

perlu diingat untuk menggunakan tanda koma saat membuat tupel dengan satu elemen, misalnya :
 t = ('a',)

tanpa tanda koma, ini akan diartikan sebagai string. 
Kita juga dapat membuat tupel menggunakan fungsi tupel bawaan . Tanpa argumen, ini membuat tupel kosong Jika argumen untuk tupel adalah berurutan maka ini menciptakan tuple dari unsur urutan yang, misalnya:
Sebagian besar operator, seperti operator untuk mengiris dan mengindeks, bekerja seperti yang mereka lakukan pada daftar.
TypeError. Kita dapat membandingkan tupel dengan cara yang sama seperti kita membandingkan urutan lainnya, menggunakan operator ==,> dan <. 

penggunaan penting tuple adalah untuk memungkinkan kita menetapkan lebih dari datu variabel pada satu waktu menempatkan tuple disisi kiri tugas, misalkan :

kami sebenarnya dapat menggunakan beberapa tugas ini untuk menukar nilai dalam tuple, misalnya :

valueError akan muncul jika jumlah nilai di setiap sisi tugas adalah tidak sama. 

Dictionaries

kamus adalah kumpulan sembarang objek yang diindeks oleh angkka, string, atau lainnya benda yang tidak bisa diubah. tabel berikut berisi semua metode kamus dan deskripsinya :

Method 

Description

len(d) 

Number of items in d.

d.clear() 

Removes all items from d.

d.copy() 

Makes a shallow copy of d.

d.fromkeys(s [,value]) 

Returns a new dictionary with keys from sequence s and values set to value.

d.get(k [,v]) 

Returns d[k] if found, or else returns v, or None if v is not given.

d.items() 

Returns a sequence of key:value pairs in d.

d.keys() 

Returns a sequence of keys in d.

d.pop(k [,default]) 

Returns d[k] and removes it from d. If d[k] is not found, it returns default or raises KeyError.

d.popitem() 

Removes a random key:value pair from d and returns it as a tuple.

d.setdefault(k [,v]) 

Returns d[k]. If d[k] is not found, it returns v and sets d[k] to v.

d.update(b) 

Adds all objects from b to d.

d.values() 

Returns a sequence of values in d.


Kamus Python adalah satu-satunya jenis pemetaan bawaan dan mirip dengan tabel hash atau array asosiatif yang ditemukan dalam bahasa lain. Mereka dapat dianggap sebagai pemetaan dari satu set kunci ke satu set nilai. Mereka dibuat menggunakan sintaks {key: value}. Misalnya, berikut ini membuat kamus yang memetakan kata menjadi angka:
     d ={'one': 1 , 'two': 2, 'three': 3 } # creates a dictionary

kita dapat menambahkan kunci dan nilai sebagai berikut :
     d['four']=4 #add an item
atau perbaharui beberapa nilai menggunakan berikut ini :
      d.update({'five': 5, 'six': 6}) #add multiple items
saat kita memeriksa d, kami mendapatkan berikut ini :

kita dapat menguji terjadinya suatu nilai menggunakan operator in, misalnya :

Perlu dicatat bahwa operator in, ketika diterapkan pada kamus, bekerja dengan cara yang sedikit berbeda dengan ketika diterapkan pada daftar . Saat kita menggunakan operator in pada daftar, hubungan antara waktu yang dibutuhkan untuk menemukan elemen dan ukuran daftar dianggap linier. Artinya, saat ukuran list semakin besar, waktu yang dibutuhkan untuk menemukan elemen bertambah, paling banyak, secara linier.
Berbeda dengan objek list, ketika operator in diterapkan ke kamus, ia menggunakan algoritme hashing dan ini memiliki efek peningkatan waktu untuk setiap pencarian yang hampir tidak bergantung pada ukuran kamus . Ini membuat kamus sangat berguna sebagai cara untuk bekerja dengan data yang diindeks dalam jumlah besar . 
Perhatikan ketika kita mencetak key: value pair dari dictionary, ia melakukannya tanpa urutan tertentu. Ini bukan masalah karena kami menggunakan kunci yang ditentukan untuk mencari setiap nilai kamus daripada urutan bilangan bulat yang diurutkan seperti halnya string dan daftar. 

Sorting dictionaries

jika kita inggin melakukan pengurutan sederhana pada kunci atau nilai kamus, kita dapat melakukan sebagai berikut :
perhatikan bahwa baris pertama pada kode sebelumnya mengurutkan kunci menurut urutan abjad, dan baris kedua mengurutkan nilai dalam urutan nilai integer. 

Metode yang diurutkan memiliki dua argumen opsional yang menarik: key dan reverse.
Argumen kunci tidak ada hubungannya dengan kunci kamus, tetapi lebih merupakan cara untuk meneruskan fungsi ke algoritma pengurutan untuk menentukan urutan pengurutan. 

Pada dasarnya, apa yang dilakukan kode sebelumnya adalah agar setiap kunci di d menggunakan nilai yang sesuai untuk mengurutkan.  Pendekatan alternatif adalah dengan menggunakan pemahaman daftar, seperti yang ditunjukkan contoh berikut:
metode sort () juga memiliki argumen kebalikan opsional, dan tidak mengherankan, ini memiliki argumen terbalik persis seperti yang dikatakannya, membalik urutan daftar yang diurutkan, misalnya: 

sekarang, katakanlah kita diberi kamus berikut, kata-kata bahasa inggris sebagai kunci dan bahasa prancis kata-kata sebagai nilai. Tugas kita adalah menempatkan nilai string ini dalam urutan numerik yang benar :
d2 ={'one':'uno' , 'two':'deux', 'three':'trois', 'four': 'quatre', 'five':
'cinq', 'six':'six'}

karena semua kunci dan nilai adalah string, kami tidak memiliki konteks untuk pengurutan numerik. meletakkan item iini dalam urutan yang benar, kita perlu menggunakan kamus pertama yang kita buat, memetakan kata-kata ke angka sebagai cara untuk memesan kamus bahasa inggris ke bahasa prancis kita :

perhatikan bahwa kita menggunakan nilai dari kamus pertama, d, untuk mengurutkan kunci dari kamus kedua, d2. karena kunci kami di kedua kamus sama, kami dapat menggunan daftar pemahaman untuk mengurutkan nilai dari kamus bahasa prancis ke bahasa inggris :

kita bisa mendefinisikan metode kustom kita sendiri yang bisa kita gunakan sebagai argumen kunci metode yang diurutkan. misalnya, disini kita mendefinisikan fungsi yang hanya mengembalikan yang terakhir huruf dari sebuah string :
def corder(string):
     return(string[len(string)-1])

kita kemudian dapat menggunakan ini sebagai kunci untuk fugsi yang diurutkan untuk mengurutkan setiap elemen dengan huruf terakhirnya :


Dictionaries for text analysis

item serupa secara berurutan; contoh tipikal adalah menghitung kemunculan kata-kata dalam tubuh teks. Kode berikut membuat kamus di mana setiap kata dalam teks digunakan sebagai kunci dan jumlah kemunculan sebagai nilainya . Ini menggunakan idiom yang sangat umum dari loop bersarang. Di sini kita menggunakannya untuk melintasi garis dalam file dalam loop luar dan kunci kamus pada loop batin:
def wordcount(fname):
try:
fhand=open(fname)
except:
print('File cannot be opened')
exit()
count= dict()
for line in fhand:
words = line.split()
for word in words:
if word not in count:
count[word] = 1
else:
count[word] += 1
return(count)

Ini akan mengembalikan kamus dengan elemen untuk setiap kata unik dalam file teks Anda memerlukan file teks yang disimpan di direktori yang sama saat Anda menjalankan kode . Di sini kami menggunakan alice.txt, kutipan singkat dari Alice in Wonderland . Untuk mendapatkan hasil yang sama, Anda dapat mendownload alice.txt dari davejulian.net/bo5630, atau menggunakan file teks Anda sendiri . Dalam kode berikut, kami membuat kamus lain, disaring, yang berisi subset dari item dari count:
count=wordcount('alice.txt')
filtered = { key:value for key, value in count.items() if value < 20 and
value > 15 }

saaat kita mencetak kamus yang di filter, kita mendapatkan seperti berikut ini :

perhatikan penggunaan pemahaman kamus yang digunakan untuk membuat kamus yang difilter. pemahaman kamus bekerja dengan cara yang identik dengan pemahaman daftar yang kita lihat di bab 1. 

Sets

Set adalah koleksi item unik yang tidak berurutan . Perbedaan penting dengan set adalah tidak boleh berisi item duplikat . Himpunan biasanya digunakan untuk melakukan operasi matematika seperti persimpangan, persatuan, perbedaan, dan komplemen.
Tidak seperti tipe urutan, tipe set tidak menyediakan operasi pengindeksan atau pemotongan. Ada dua jenis objek set di Python, objek set yang bisa berubah dan objek frozenset yang tidak bisa diubah. Set dibuat menggunakan nilai yang dipisahkan koma dalam tanda kurung kurawal. Omong-omong, kita tidak bisa membuat himpunan kosong menggunakan a = {}, karena ini akan membuat kamus. Untuk membuat himpunan kosong, kita menulis a = set() atau a = frozenset(). 

metode dan operasi set dijelaskan dalam tabel berikut :

Method 

Operators 

Description

len(s) 


Returns the number of elements in s

s.copy() 


Returns a shallow copy of s

s.difference(t) 

s - t- t2 - 

...

Returns a set of all items in s but not in t

s.intersection(t) 


Returns a set of all items in both t and s

s.isdisjoint(t) 


Returns True if s and t have no items in common

s.issubset(t) 

s <= t 

s < t (s != 

t)

Returns True if all items in s are also in t

s.issuperset(t) 

s >= t 

s > t (s != 

t)

Returns True if all items in t are also in s

s.symmetric_difference(t) 

s ^ t 

Returns a set of all items that are in s or t, but not both

s.union(t) 

s | t1 | t2 

|...

Returns a set of all items in s or t


pun yang mendukung iterasi dan semua metode tersedia untuk objek set dan frozenset . Penting untuk diketahui bahwa versi operator dari metode ini memerlukan argumennya untuk disetel, sedangkan metode itu sendiri dapat menerima tipe iterable apa pun. Misalnya, s -, untuk set apa pun, akan menghasilkan jenis operan yang tidak didukung. Menggunakan persamaan s.difference akan mengembalikan hasil. 

objek set yang dapat diubah memiliki metode tambahan, dijelaskan dalam tabel berikut :

Method 

Description

s.add(item) 

Adds item to s. Has no effect if item is already present.

s.clear() 

Removes all items from s.

s.difference_update(t) 

Removes all items in s that are also in t.

s.discard(item) 

Removes item from s.

s.intersection_update(t) 

Removes all items from s that are not in the intersection of s and t.

s.pop() 

Returns and removes an arbitrary item from s.

s.remove(item) 

Removes item from s.

s.symetric_difference_update(t) 

Removes all items from s that are not in the symmetric difference of s and t.

s.update(t) 

Adds all the items in an iterable object t to s.


contoh berikut menunjukkan beberapa operasi set sederhana dan hasilnya :

 Jika Anda mencoba menggunakan objek yang bisa berubah seperti daftar atau kamus dalam satu set, Anda akan menerima kesalahan tipe yang tidak bisa di-hash . Semua jenis hash memiliki nilai hash yang tidak berubah selama masa pakai instance . Semua tipe immutable built-in dapat di-hash . Semua tipe built-in yang bisa berubah tidak bisa di-hash, jadi mereka tidak bisa digunakan sebagai elemen set atau kunci kamus .

selain metode bawaan ini, ada sejumlah operasi lain yang kami dapat tampil di set. misalkan, untuk menguji keanggotaan suatu set, gunakan yang berikut ini :
kita dapat melakukan loop melalui elemen dalam satu set menggunakan yang berikut ini :


Immutable sets

Python memiliki tipe set yang tidak dapat diubah yang disebut frozenset. Ia bekerja hampir persis seperti dipisahkan dari tidak mengizinkan metode atau operasi yang mengubah nilai seperti menambahkan atau menghapus metode. Ada beberapa cara agar kekekalan ini dapat bermanfaat. Misalnya, karena set normal bisa berubah dan oleh karena itu tidak bisa dicirikan, mereka tidak bisa digunakan sebagai anggota set lain. Frozenset, di sisi lain, adalah kekal dan karena itu dapat digunakan sebagai anggota set:

juga properti frozenset yang tidak dapat diubah berarti kuta dapat menggunakannya sebagai kunci kamus, sebagai contoh :


Modules for data structures and algorithms

Selain tipe bawaan, ada beberapa modul Python yang bisa kita gunakan untuk memperluas tipe dan fungsi bawaan ini . Dalam banyak kasus, modul Python ini mungkin menawarkan efisiensi dan keuntungan pemrograman yang memungkinkan kita untuk menyederhanakan kode kita .
Sejauh ini, kita telah melihat tipe data bawaan dari string, daftar, himpunan, dan kamus serta modul desimal dan pecahan . pustaka Python yang menyediakan ekstensi untuk tipe data bawaan.Ini akan dibahas di bagian berikut.

Collections

modul koleksi menyediakan alternatif kinerja yang lebih khusus dan tinggi untuk tipe data bawaan serta fungsi utilitas untuk membuat tuple bernama. pengikut tabel data dan operasi modul koleksi dan deskripsinya :

Datatype or operation Description

description 

namedtuple() 

Creates tuple subclasses with named fields.

deque 

Lists with fast appends and pops either end.

ChainMap 

Dictionary like class to create a single view of multiple mappings.

Counter 

Dictionary subclass for counting hashable objects.

OrderedDict 

Dictionary subclass that remembers the entry order.

defaultdict 

Dictionary subclass that calls a function to supply missing values.

UserDict 

UserList 

UserString

These three data types are simply wrappers for their underlying base classes. Their use has largely been supplanted by the ability to subclasas their respective base classes directly. Can be used to access the underlying object as an attribute.




Deques

Antrean berujung ganda, atau deques, adalah objek seperti daftar yang mendukung penambahan yang aman untuk thread dan hemat memori . Deques bisa berubah dan mendukung beberapa operasi daftar, seperti pengindeksan .Deques adalah ulir, aman dan dapat diserialkan menggunakan modul acar .
Cara berpikir yang berguna tentang deques adalah dalam hal mengisi dan mengonsumsi barang. item dalam deques biasanya diidi dan dikomsumsi secara berurutan dari kedua ujung :

kita bisa menggunakan metode pop () dan popleft () untuk mengkonsumsi item deques, contohnya :
kita juga bisa menggunakan metode rotate (n) untuk memindahkan dan memutar semua item dari n langkah ke kanan untuk nilai positif dari bilangan bulat n, atau kiri untuk nilai negatif dari n kiri, menggunakan bilangan bulat positif sebagai argumennya, contoh :

cara sederhana untuk mengembalikan sepotong deques, sebagai daftar, yang dapat dilakukan sebagai berikut :

Metode itertools.islice bekerja dengan cara yang sama seperti slice bekerja pada daftar, kecuali daripada mengambil daftar untuk argumen, ia mengambil iterable dan mengembalikan nilai yang dipilih, dengan indeks start dan stop, sebagai daftar.
Fitur yang berguna dari deques adalah bahwa mereka mendukung parameter opsional maxlen yang membatasi ukuran deque. Ini membuatnya cocok untuk struktur data yang dikenal sebagai buffer melingkar. Ini adalah struktur berukuran tetap yang terhubung secara efektif ujung ke ujung dan biasanya digunakan untuk menyangga aliran data. Berikut ini adalah contoh dasar:

dq2=deque([],maxlen=3)
for i in range(6):
dq2.append(i)
print(dq2)

maka akan menampilakan seperti berikut :
Dalam contoh ini, kami mengisi dari kanan dan mengonsumsi dari kiri. Perhatikan bahwa setelah buffer penuh, nilai terlama digunakan terlebih dahulu, dan nilai diganti dari kanan. Kita akan melihat buffer melingkar lagi di Bab 4, Daftar dan Struktur Pointer, dengan mengimplementasikan daftar melingkar. 

ChainMaps

Kelas collections.chainmap ditambahkan dengan Python 3.2 dan menyediakan cara untuk menautkan sejumlah kamus, atau pemetaan lain, sehingga dapat diperlakukan sebagai satu objek. Pemetaan yang mendasari objek ChainMap disimpan dalam daftar dan dapat diakses menggunakan atribut maps untuk mengambil kamus ke-i . Perhatikan bahwa meskipun kamus itu sendiri tidak berurutan, ChainMaps adalah daftar kamus yang diurutkan . ChainMap berguna dalam aplikasi di mana kami menggunakan sejumlah kamus yang berisi data terkait .
Aplikasi yang mengonsumsi mengharapkan data dalam bentuk prioritas, di mana kunci yang sama dalam dua kamus diberikan prioritas jika muncul di awal daftar yang mendasarinya . ChainMap biasanya digunakan untuk mensimulasikan konteks bersarang seperti saat kami memiliki beberapa pengaturan konfigurasi yang diganti .Contoh berikut menunjukkan kasus penggunaan yang mungkin untuk chainMap :

 Keuntungan menggunakan ChainMaps, bukan hanya kamus, adalah kami mempertahankan nilai yang telah ditetapkan sebelumnya. Menambahkan konteks anak akan mengganti nilai untuk kunci yang sama, tetapi tidak menghapusnya dari struktur data. Kami dapat mengambil dan mengubah nilai apa pun di kamus mana pun dengan menyediakan metode peta dengan indeks yang sesuai. Indeks ini mewakili kamus di ChainMap. 

Counter objects

Penghitung adalah subkelas kamus di mana setiap kunci kamus adalah objek hashable dan nilai terkait adalah hitungan bilangan bulat dari objek itu . Ada tiga cara untuk menginisialisasi penghitung. Kita bisa lulus setiap objek urut, kamus kunci: pasangan nilai, atau tuple dari format, misalnya:

kita juga dapat membuat objek penghitung kosong dan mengisinya dengan meneruskan metode pembaruannya iterable atau kamus misalnya :

setelah penghitung diisi, kita dapat mengakses nilai yang disimpan dengan cara yang sama seperti untuk kamus, misalnya :

perbedaan paling mencolok antara objke tandingan dan kamus adalah objek tandingan mengembalikan jumlah nol untuk item yang hilang daripada memunculkan kesalahan kunci, misalnya :
Kita dapat membuat iterator dari objek Counter dengan menggunakan metode elemennya . Ini mengembalikan iterator di mana jumlah di bawah satu tidak disertakan dan pesanan tidak dijamin . Dalam kode berikut, kami melakukan beberapa pembaruan, membuat iterator dari elemen perhitungan, dan gunakan sort () untuk mengurutkan kunci menurut abjad :

Dua metode Counter lainnya yang layak disebutkan adalah most_common dan subtract . Metode paling umum menggunakan argumen bilangan bulat positif yang menentukan jumlah elemen paling umum untuk dikembalikan . Elemen dikembalikan sebagai daftar tupel.


Ordered dictionaries


 





















 

 

 

 



























Komentar

Postingan populer dari blog ini

greedy

Algoritma Sorting Quick Sort

Kode Program tentang SEARCHING