1-sahifa 2-sahifa
Download 363.98 Kb.
|
Python
- Bu sahifa navigatsiya:
- 115-bet 14.3. Royxat qoshilishi 115
- 14.3. Royxat qoshilishi
- 14.4. Royxatdan ochirish
- 14.5. Saralash royxatlari
- 117-bet 14.6. Foydali royxat boyicha maslahatlar 117
- 14.6. Ish uchun foydali maslahatlar royxatlari bilan
- 118-bet 118-son
- 119-bet 14.6. Foydali royxat boyicha maslahatlar 119
- 1-bosqich: Python royxatni tuzadi
- 2-qadam: Saralangan funktsiya yangi royxat yaratadi.
- 121-bet 14.6. Foydali royxat boyicha maslahatlar 121
- E-3: a-a-nums_sortida
- 123-bet 14.7. Tuplalar 123
- 125-bet 14,8. Kopchilik 125
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 14-bob. Konteynerlar: ro'yxatlar, to'plamlar va to'plamlar Ro'yxatni allaqachon to'ldirilgan qilish uchun sizga kerak bo'lganlarni sanab o'ting
>>> 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.
Ro'yxat Python-dagi ketma-ketlik turlaridan biridir . Ma'lumot Sequences buyurtma qilingan narsalarning to'plamlarini saqlaydi. Kimga
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 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
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
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 () 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-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]
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 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
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
yangi ro'yxatga ishora qiladi. Eslatma: tartiblangan funktsiya ishlaydi faqat ro'yxatlar bilan emas, balki har qanday ketma-ketliklar bilan
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 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.
STI Ularni buyurtma qilingan ma'lumotlar yozuvi sifatida ko'rib chiqish mumkin. Keyin O'tkazgich yaratilgandan so'ng uni o'zgartira olmaysiz. Yaratmoq
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
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,)
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 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 " AttributeError: 'tuple' ob'ektida atribut yo'q "qo'shish"
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
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.
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):
Download 363.98 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling