1-sahifa 2-sahifa


Download 363.98 Kb.
bet10/21
Sana06.06.2020
Hajmi363.98 Kb.
#115448
1   ...   6   7   8   9   10   11   12   13   ...   21
Bog'liq
Python


14 konteyner: ro'yxatlar,

tuynuklar va to'plamlar

Hozirgacha ko'rib chiqilgan ko'plab turlar SKA edi



yagona qiymatlarni o'z ichiga olgan yagona qiymat. Butun sonlar, sonlar

suzuvchi nuqta va mantiqiy qiymatlar barchasi skalalardir

o'qish.

Konteynerlarda bitta emas, balki bir nechta ob'ektlar bo'lishi mumkin (ska-



lar turlari va hatto boshqa idishlar). Ushbu bobda muhokama qilinadi

ushbu turlarning ba'zilari ro'yxatlar, bog'ichlar va to'plamlardir.



14.1. Ro‘yxatlar

Ro'yxatlar , ismdan ko'rinib turibdiki, saqlash uchun ishlatiladi

ob'ektlar ro'yxati. Python-da ro'yxat elementlardan iborat bo'lishi mumkin

o'zboshimchalik turi, shu jumladan har xil turdagi elementlar. Biroq, yoqilgan

Amalda, faqat bitta turdagi ro'yxatlar ko'pincha ro'yxatlarda saqlanadi. Ro‘yxat

buyurtma qilingan ketma-ketlik sifatida ham tasavvur qilish mumkin

elementlar. Ro'yxatlar o'zgaruvchan turlari ; bu degani

ularning tarkibini yaratmasdan qo'shishingiz, o'chirishingiz va o'zgartirishingiz mumkin

yangi ob'ekt. Bo'sh ro'yxatlarni tuzishning ikki yo'li mavjud; sabab -

sinflar ro'yxati va to'rtburchaklardagi so'zma-so'z sintaksisdan foydalanish

qavslar - [] :

>>> ismlar = ro'yxati ()

>>> boshqa_name = []





114-bet

114

14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar

Ro'yxatni allaqachon to'ldirilgan qilish uchun sizga kerak bo'lganlarni sanab o'ting

so'zma-so'z sintaksis yordamida kvadrat qavslardagi qiymatlar :

>>> other_names = ['Fred', 'Charlz']



ESLATMA

Ro'yxat sinfi oldindan to'ldirilganlarni yaratish uchun ham ishlatilishi mumkin

ro'yxatlari, lekin sintaksisi juda qiyin, chunki

ro'yxatni o'tkazish kerak:

>>> other_names = list (['Fred', 'Charlz'])

Odatda, ushbu sinf boshqa turdagi ketma-ketlikni birlashtirish uchun ishlatiladi.

Ro'yxatlarga oid tafsilotlar. Masalan, satr - bu ketma-ketlik

belgilar. Agar siz qo'ng'iroqlar ro'yxatiga kirsangiz, siz ro'yxatdan o'tasiz,

samarali belgilar:

>>> ro'yxati ('Matt')

['M', 'a', 't', 't']

Ro'yxatlar, boshqa turlar singari, ishlatilishi mumkin bo'lgan usullarga ega

ularga qo'ng'iroq qiling (ishlatilayotgan usullarning to'liq ro'yxatini ko'rish uchun)

Dir ([]) ) raqamiga qo'ng'iroq qiling . Masalan, ro'yxat oxiriga elementlarni qo'shish

.append usuli bilan amalga oshiriladi :

>>> names.append ('Matt')

>>> names.append ('Fred')

>>> chop etish (ismlari)

['Matt', 'Fred']

Esda tutingki, ro'yxatlar o'zgarishi mumkin. Python qaytmaydi

buyumlarni biriktirishda yangi ro'yxat. E'tibor bering: siz-

.Append qo'ng'irog'i ro'yxatni qaytarmaydi (REPL hech narsa chiqarmaydi). Buning o'rniga

Bu None ni qaytaradi va ro'yxat joyida yangilanadi. Pythonda

standart funktsiya yoki usul None ni qaytaradi . Yaratib bo‘lmadi

hech narsa qaytarmaydigan usul.

14.2. Ko'rsatkichlar

Ro'yxat Python-dagi ketma-ketlik turlaridan biridir . Ma'lumot

Sequences buyurtma qilingan narsalarning to'plamlarini saqlaydi. Kimga



115-bet

14.3. Ro'yxat qo'shilishi

115

ketma-ketliklar bilan samarali ishlash, siz tushunishingiz kerak



indeks nima . Ro'yxatning har bir elementida indeks mavjud

ro'yxatda uning joylashgan joyini ko'rsatgan holda. Masalan, ishlab chiqarishda

kartoshka chiplarida kartoshka, sariyog 'va tuz ishlatilgan

odatda shu tartibda keltirilgan. Kartoshka joylashgan

ro‘yxatning birinchi o‘rnida, ikkinchisida moy, uchinchisida tuz.

Ko'p dasturlash tillarida birinchi element ketma-ketlikdir

indeks 0 ga, ikkinchisi 1 indeksga, uchinchisi 2 indeksiga,

va hokazo. Indekslarni raqamlash noldan boshlanadi.

Ro'yxat elementiga kirish uchun ushbu elementning indeksi ko'rsatilgan,

kvadrat qavs ichiga o'ralgan:

>>> ismlar [0]

"Mat"


>>> ismlar [1]

"Fred"


14.3. Ro'yxat qo'shilishi

Ma'lum bir indeks mavjud bo'lgan joyga buyumni qo'shish uchun foydalaning

.Insert usulini chaqiring . .Insert chaqirilganda , quyidagi barcha elementlar

ushbu indeks bo'yicha o'ngga siljiting:

>>> names.insert (0, 'Jorj')

>>> chop etish (ismlari)

['Jorj', 'Mett', 'Fred']

Elementni berilgan indeks bilan almashtirish uchun sintaksisdan foydalaning

kvadrat qavs bilan:

>>> ismlar [1] = 'Genri'

>>> chop etish (ismlari)

['Jorj', 'Genrix', 'Fred']

Ro'yxatning oxiriga elementlarni biriktirish uchun usuldan foydalaning

. qo‘shish :

>>> names.append ('Pol')

>>> chop etish (ismlari)

['Jorj', 'Genrix', 'Fred', 'Pol']



116-bet

116

14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar



ESLATMA

Pythonda ro'yxatlar aslida ko'rsatgichlar qatori sifatida amalga oshiriladi.

Bunday amalga oshirish elementlarga tezkor tasodifiy kirishni ta'minlaydi.

u erda indekslar bo'yicha. Bunga qo'shimcha ravishda, oxirida operatsiyalarni biriktiring va yo'q qiling

ro'yxati tez (O (1)), kiritish va o'chirish

ro'yxatning o'rtasida sekinroq bajariladi (O (n)). Agar bu sizga aylansa

tez-tez ro'yxatning yuqori qismiga narsalarni kiritish va chiqarib tashlash kerak, yaxshiroq

collections.deque ma'lumotlar tuzilmasidan foydalaning .



14.4. Ro'yxatdan o'chirish

Ro'yxatdagi narsalarni o'chirish uchun .remove usulidan foydalaning :

>>> names.remove ('Pol')

>>> chop etish (ismlari)

['Jorj', 'Genrix', 'Fred']

Indeks yordamida sintaksis yordamida yo'q qilish ham mumkin

kvadrat qavs bilan:

>>> del nomlari [1]

>>> chop etish (ismlari)

['Jorj', 'Fred']



14.5. Saralash ro'yxatlari

Eng keng tarqalgan ro'yxat operatsiyalaridan biri saralashdir .

.Sort usuli saralash paytida ro'yxatdagi qiymatlarni buyurtma qiladi

joyida olib borildi . Ushbu usul yangi turni qaytarmaydi.

ro'yxatning nusxasi va o'zgartirilgan tartib bilan ro'yxatni yangilaydi

elementlar:

>>> names.sort ()

>>> chop etish (ismlari)

['Fred', 'Jorj']

Agar avvalgi elementlarning tartibi muhim bo'lsa, ro'yxatni avvalroq nusxa ko'chiring

tartiblash. Ammo, ketma-ketlikni ham tartiblash





117-bet

14.6. Foydali ro'yxat bo'yicha maslahatlar

117

Tartiblangan funktsiya yordamida siz umumiyroq echimdan foydalanishingiz mumkin .

Saralangan funktsiya har qanday ketma-ketlik bilan ishlaydi va qaytadi

buyurtma qilingan narsalar bilan yangi ro'yxat:

>>> eski = [5, 3, -2, 1]

>>> nums_sorted = saralangan (eski)

>>> chop etish (nums_sorted)

[-2, 1, 3, 5]

>>> chop etish (eski)

[5, 3, -2, 1]

Saralashda ehtiyot bo'ling. Python sizni talab qiladi

o'z niyatlarini aniq ifoda etdilar. Python 3-da, tartiblashga urinayotganda

Turli elementlar ro'yxatida xato yuzaga kelishi mumkin:

>>> narsalar = [2, 'abc', 'Zebra', '1']

>>> narsalar.sort ()

Traceback (eng so'nggi qo'ng'iroq oxirgi):

...

TypeError: o'zgarmas turlari: str ()

.Sort usuli va tartiblangan funktsiya sizga tartibni boshqarishga imkon beradi.

hizalanish, bunda ixtiyoriy funktsiya asosiy parametrda o'tkaziladi

tartiblash. Kalit parametr funktsiyani (shuningdek sinfni) o'z ichiga olishi mumkin

yoki usul), u bitta elementni oladi va biror narsani qaytaradi

taqqoslash uchun mos.

Quyidagi misol, ko'chasi uzatiladi yilda asosiy parametr , barcha elementlar

ro'yxat satrlarni tartiblash qoidalari bo'yicha tartiblangan:

>>> narsalar.sort (kalit = str)

>>> chop etish (narsalar)

['1', 2, 'Zebra', 'abc']



14.6. Ish uchun foydali maslahatlar

ro'yxatlari bilan

Odatda ro'yxatlar boshqa usullarni ham qo'llab-quvvatlaydi. Quyidagi

Python tarjimonini qamrab oling va ba'zi misollar keltiring. Unutmang

Do'stlaringiz haqida dir va yordam .





118-bet

118-son

14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar



MASLAHAT

Ichki diapazon funktsiyasi butun sonlarni ketma-ketligini tuzadi.

Quyidagi parcha 0 dan 4 gacha bo'lgan raqamlar ketma-ketligini yaratadi:

>>> sonlar soni (5)

>>> raqamlar

oraliq (5)

Python 3 keraksiz ishlarni yoqtirmaydi. Diapazon funktsiyasi ro'yxatni amalga oshirmaydi,

Qaytarilganda bu raqamlarni qaytaradigan iterator beradi.

Ro'yxat natijalaridan o'tib , siz hosil bo'lgan raqamlarni ko'rishingiz mumkin:

>>> ro'yxati (raqamlar)

[0, 1, 2, 3, 4]

E'tibor bering: hosil qilingan ketma-ketlik o'z ichiga olmaydi

Qonun 5. Python-ning ko'pgina ko'rsatkichlari oxirgi ko'rsatkichlardan foydalanishni anglatadi

"Ilgari, lekin o'z ichiga olmaydi" (bu turdagi yana bir misol - tilim) taqdim etiladi

keyinroq).

Agar ketma-ketlik noldan boshlanadigan bo'lsa, funktsiyalar

oralig'ida siz ikkita parametrdan o'tishingiz mumkin. Bunday holda, birinchi parametr aniqlanadi

ketma-ketlikning boshini (inklyuziv), ikkinchisini - oxirini ajratadi

shu jumladan:

2 dan 5 gacha raqamlar

>>> raqamlar2 = diapazon (2, 6)

>>> raqamlar2

oraliq (2, 6)

Funktsiya da qator ham ixtiyoriy uchinchi parametr bor - pri-



etishtirish . Agar o'sish 1 bo'lsa (standart), keyingi raqam

diapazon bo'yicha qaytarilgan ketma-ketlik avvalgisidan 1 katta bo'ladi.

2-qadamda har ikkinchi raqam qaytariladi. Keyingi qismida

Misol faqat 11 dan kichik raqamlarni qaytaradi:

>>> teng = diapazon (0, 11, 2)

>>> hatto

oraliq (0, 11, 2)

>>> ro'yxati (hattoki)

[0, 2, 4, 6, 8, 10]



119-bet

14.6. Foydali ro'yxat bo'yicha maslahatlar

119

Saralash ro'yxatlari

ismlar = ['Jorj', 'Fred']

Kod


Kompyuter nima qiladi

O'zgaruvchilar

Ob'ektlar

O'zgaruvchilar

Ob'ektlar

[,]


Id: 4f3b

Turi: Ro'yxat

ismlar

"Jorj"


Id: 4f3f

Turi: String

"Fred"

Id: 4f4a


Turi: String

1-bosqich: Python ro'yxatni tuzadi

names.sort ()

[,]

Id: 4f3b


Turi: Ro'yxat

ismlar


"Jorj"

Id: 4f3f


Turi: String

"Fred"


Id: 4f4a

Turi: String



2-bosqich: Python ro'yxatni joyida tartiblaydi

Ro'yxatni qaytarmaydi!



Anjir. 14.1. .Sort usuli yordamida ro'yxatni tartiblash. Esda tuting, ro'yxat tartiblangan.

"joyida". .Sort usulini chaqirish natijasida ro'yxat o'zgaradi va usulning o'zi

qaytadi Hech biri



120-bet

120

14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar

Tartiblangan funktsiyasi bilan ro'yxatlarni tartiblash

eski = [5, 3, -2, 1]

Kod

Kompyuter nima qiladi



O'zgaruvchilar

Ob'ektlar

O'zgaruvchilar

Ob'ektlar

[,,]

Id: 4f3b


Turi: Ro'yxat

qari


5

Int


nums_sorted = saralangan (eski)

3

Int



-2

Int


1

Int


1-bosqich: Python ro'yxatni tuzadi

eski = [5, 3, -2, 1]

[,,]

Id: 4f3b


Turi: Ro'yxat

qari


5

Int


nums_sorted = saralangan (eski)

3

Int



-2

Int


1

Int


2-qadam: Saralangan funktsiya yangi ro'yxat yaratadi.

[,,]


Id: 4f5a

Turi: Ro'yxat



Anjir. 14.2. Ro'yxatni tartiblangan funktsiya bo'yicha tartiblang. E'tibor bering: ro'yxat yo'q

o'zgaradi va chaqirilganda, yangi ro'yxat qaytariladi. Shuningdek, python re

yangi narsalarni yaratmasdan ro'yxat elementlaridan foydalanadi



121-bet

14.6. Foydali ro'yxat bo'yicha maslahatlar

121

old = [5, 3, -2, 1] O'zgaruvchan ob'ektlar

[,,]

Id: 4f3b


Turi: Ro'yxat

qari


5

Int


nums_sorted = saralangan (eski)

3

Int



-2

Int


1

Int


E-3: a-a-nums_sortida

[,,]


Id: 4f5a

Turi: Ro'yxat

nums_sorted

Anjir. 14.3. Oxirgi bosqichda, topshiriqni bajarish natijasida o'zgaruvchi

yangi ro'yxatga ishora qiladi. Eslatma: tartiblangan funktsiya ishlaydi

faqat ro'yxatlar bilan emas, balki har qanday ketma-ketliklar bilan

ESLATMA

Qurilish "yuqoriga ko'tarilgan, ammo o'z ichiga olmaydi" degan ma'noni anglatadi.



ichki oraliq . Odatda qachon yarim ochiq intervallar ishlatiladi

natural sonlarning ketma-ketligini aniqlash. Ular bir qator bor

qulay xususiyatlari:

• Bir qator ketma-ket raqamlarning uzunligi oxir orasidagi farqga teng

va oraliqning boshlanishi.

• Ikki ketma-ketlik chayqalishi bir-birining ustiga tushmasdan amalga oshiriladi.

Pythonda yarim ochiq intervalli idioma juda tez-tez ishlatiladi.

Masalan:




122-bet

122

14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar

>>> a = diapazon (0, 5)

>>> b = diapazon (5, 10)

>>> ikkalasi ham = list (a) + list (b)

>>> len (ikkalasi) № 10 - 0

10

>>> ikkalasi ham



[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Agar siz tez-tez raqamli ketma-ketliklar bilan ishlasangiz, kerak

xuddi shunday qiling - ayniqsa API aniqlashda.

Mashhur dasturchi nazariyotchisi Edgar Diykstra (Edsger)

Dijkstra) 0-dan indekslash haqida o'ylayapti va nima uchun bu imkoniyat

to'g'ri 1 . U o'z argumentini quyidagicha yakunlaydi:

“Ko'plab dasturlash tillari e'tiborga olinmasdan ishlab chiqilgan.

bu tafsilotga murojaat qiling. ”

Yaxshiyamki, Python bu tillardan biri emas.

14.7. Tuplalar

Umumiy bo'lim (dizilerini) bo'lgan doimiy sequentially-

STI Ularni buyurtma qilingan ma'lumotlar yozuvi sifatida ko'rib chiqish mumkin. Keyin

O'tkazgich yaratilgandan so'ng uni o'zgartira olmaysiz. Yaratmoq

so'zma-so'z sintaksisdan foydalanib , tarkibiy qismlarni qo'shing

Qavslar ichiga qo'ying va ularni vergul bilan ajrating. Bir ham mavjud nizomning sinf ,

yangi to'plamni qurish uchun ishlatilishi mumkin.

mavjud ketma-ketlik:

>>> row = ('Jorj', 'Gitara')

>>> qator

('Jorj', 'Gitara')

>>> row2 = ('Pol', 'Bass')

>>> qator 2

("Pol", "Bass")

1

https://www.cs.utexas.edu/users/EWD/transmissions/EWD08xx/EWD831.html





123-bet

14.7. Tuplalar

123

Nol yoki bitta element bilan tupni yaratishingiz mumkin. Amalda

tuynuklar ma'lumotlar yozuvlarini saqlash uchun ishlatiladi, shuning uchun bu

variant kam uchraydi. Bo'sh sudlarni tashkil qilishning ikki yo'li mavjud.

gey - tuple funktsiyasi va so'zma-so'z sintaksisi:

>>> bo'sh = tuple ()

>>> bo'sh

()

>>> bo'sh = ()



>>> bo'sh

()

Bitta elementli ulanish uch yo'l bilan yaratilishi mumkin:



>>> bitta = tuple ([1])

>>> bitta

(1,)

>>> bitta = (1,)



>>> bitta

(1,)


>>> bitta = 1,

>>> bitta

(1,)

ESLATMA

Qavslar Pythonda funktsional qo'ng'iroqlarni ko'rsatish uchun ishlatiladi.

yoki usullar. Bundan tashqari, ular ustuvorlik berish uchun ishlatiladi

uyalar yaratishda ishlatilishi mumkin. Bunday mo'l-ko'llik

ilovalar noto'g'ri tushunishga olib kelishi mumkin. Oddiy huquqni eslang -

lo: agar bitta element Qavslar ichiga o'ralgan bo'lsa, Python hisoblaydi

odatdagidek qavslar (operatorlarning ustuvorligini aniqlash uchun) -

masalan, yozuvdagi kabi (2 + 3) * 8. Agar shunday bo'lsa, bir nechta qavslar ilova qilingan

vergul bilan ajratilgan elementlar, Python ularga bir qator sifatida qaraydi:

>>> d = (3)

>>> turi (d)

Bir qarashda, d - aylanaga o'ralgan tup kabi ko'rinishi mumkin

Qavslar, lekin Python d ni butun son deb biladi . Tarkibida bo'lgan tokchalar uchun



124-bet

124

14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar

bitta elementdan, yoki elementdan keyin vergul ( , ) qo'ying

foydalanish nizomning sinfini bitta-modda ro'yxati bilan:

>>> e = (3,)

>>> turi (e)



Bir nechta elementlardan iborat tupni yaratishning uchta usuli mavjud.

Odatda, ikkinchisi Pythonning eng mos uslubi deb hisoblanadi.

Qavslar oldida sizning oldingizda nima borligini ko'rishni osonlashtiradi.

sarlavha:

>>> p = tuple (['Stef', 'Curry', 'Guard'])

>>> b

('Stef', 'Curry', 'Guard')



>>> p = 'Stef', 'Curry', 'Guard'

>>> b


('Stef', 'Curry', 'Guard')

>>> p = ('Stef', 'Curry', 'Gvardiya')

>>> b

('Stef', 'Curry', 'Guard')



Dumlari o'zgarmas bo'lgani uchun, yangilariga qo'shilmoqda

imkonsiz elementlar:

>>> pappend ("Oltin davlat")

Traceback (eng so'nggi qo'ng'iroq oxirgi):

Fayl "", 1-qator, da

AttributeError: 'tuple' ob'ektida atribut yo'q

"qo'shish"

ESLATMA

Nima uchun to'rlar va ro'yxatlar alohida mavjud? Nega shunchaki emas

birinchi qarashda superset bo'lgan ro'yxatlardan foydalaning

tuplar?


Ob'ektlar orasidagi asosiy farq - bu o'zgaruvchanlik. Sifatida

uyalar o'zgarmasdir, ular lug'atlarda kalit bo'lib xizmat qilishi mumkin. Tuplalar

ko'pincha ma'lumotlar yozuvlarini ifodalash uchun ishlatiladi - masalan, satrlar



125-bet

14,8. Ko'pchilik

125

turli xil ob'ektlarni o'z ichiga olishi mumkin bo'lgan ma'lumotlar bazasi so'rovlari.

Masalan, ism, manzil va yoshni bir nechta to'plamda saqlash mumkin:

>>> kishi = ('Matt', 'Shimoliy 456 sharq', 24)

Qulflar bir nechta elementlarni funktsiyalardan qaytarish uchun ishlatiladi.

Bundan tashqari, ular ishlab chiqaruvchiga ushbu tur mo'ljallanmaganligini aytadilar

o'zgartirish uchun.

Va nihoyat, to'rlar ro'yxatlarga qaraganda kamroq xotiradan foydalanadilar. Agar ishlasangiz -

O'zgarmasligi kerak bo'lgan ketma-ketliklar bilan ovqatlaning, ehtimol siz

Xotirani saqlash uchun dublonlardan foydalanishga arziydi.



14,8. Ko'pchilik

Python-dagi boshqa turdagi idishlar to'plamlardan iborat

(sozlangan). To'plam tartiblanmagan to'plamdir

nusxalari bo'lmaydigan ob'ektlar. Ko'pgina narsalar kabi

ro'yxat yoki boshqa ketma-ketliklar, elementlar asosida tuzilishi mumkin

saralash mumkin. Biroq, ro'yxatlar va bog'ichlardan farqli o'laroq,

to'plamlar uchun elementlarning tartibi ahamiyatsiz. Ko'pincha

ikki maqsadda: dublikatlarni olib tashlash va buni tekshirish

nosti. Qidiruv mexanizmi optimallashtirilgan funktsiyaga asoslanganligi sababli

lug'atlar uchun amalga oshirilgan xeshlar, qidirish operatsiyasini talab qiladi

juda katta to'plamlar uchun juda oz vaqt.

ESLATMA

Chunki to'plamlar har bir element uchun xesh kodini hisoblashi kerak

faqat axlatlangan narsalarni saqlash mumkin . Hash kodni anglatadi

jang - bu ma'lum bir ob'ekt uchun yaratilgan kvazaga xos bo'lmagan raqam. Agar

ob'ekt yuviladi, u uchun har doim bir xil narsa ishlab chiqariladi

raqam.


Pythonda o'zgaruvchan elementlar to'planib bo'lmaydi. Bu shuni bildiradiki

Ro'yxat yoki lug'atni xesh qilish mumkin emasligi aytilgan. Hesh uchun

sinflarni chaqirish, siz __hash__ va __eq__ usullarini amalga oshirishingiz kerak .

To'plamni sinfga ketma-ketlik orqali aniqlash mumkin

to'siq (funktsiyaga o'xshash boshqa konversiya klassi):



126-bet


Download 363.98 Kb.

Do'stlaringiz bilan baham:
1   ...   6   7   8   9   10   11   12   13   ...   21




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling