Kortej va to'plam
Ro'yxat — universal vosita, lekin ba'zan bizga boshqacha xususiyatlar kerak bo'ladi: hech qachon o'zgarmaydigan ma'lumot yoki takrorlanmaydigan qiymatlar. Buning uchun Python'da yana ikkita tuzilma bor.
Bu darsda
- Kortej (
tuple) — o'zgarmas ketma-ketlik - Kortejdagi qiymatlarni o'zgaruvchilarga «ochish»
- To'plam (
set) — takrorlanmas qiymatlar - Ro'yxatdan takrorlarni olib tashlash
- To'plamlar ustida amallar: birlashma, kesishma, ayirma
Kortej (tuple)
Kortej — ro'yxatga juda o'xshaydi, faqat u oddiy qavslar ( ) bilan yoziladi va yaratilgandan keyin o'zgartirib bo'lmaydi:
hafta_kunlari = ("dushanba", "seshanba", "chorshanba", "payshanba", "juma", "shanba", "yakshanba")
print(hafta_kunlari[0])
print(hafta_kunlari[-1])
print(len(hafta_kunlari))
print("juma" in hafta_kunlari)
dushanba yakshanba 7 True
Indekslar, kesmalar, len(), in va for sikli — hammasi ro'yxatdagidek ishlaydi. Faqat o'zgartirishga urinsangiz, xato chiqadi:
hafta_kunlari = ("dushanba", "seshanba", "chorshanba")
hafta_kunlari[0] = "yakshanba"
Kortej nima uchun kerak?
- Himoya. Hech qachon o'zgarmasligi kerak bo'lgan ma'lumot: hafta kunlari, oylar nomi, shaxmat taxtasi o'lchami. Kortej tasodifan o'zgartirib yuborishdan saqlaydi.
- Bir-biriga bog'liq qiymatlar. Koordinata (kenglik, uzunlik), sana (kun, oy, yil), rang (qizil, yashil, ko'k) — bular birga bitta narsani bildiradi.
- Funksiyadan bir nechta qiymat qaytarish — buni 15-darsda ko'ramiz.
Bitta elementli kortej yaratishda vergul qo'yish shart: (5,). Vergulsiz (5) — bu oddiy qavs ichidagi son 5.
Qiymatlarni ochish
Kortejdagi qiymatlarni bir qatorda alohida o'zgaruvchilarga olish mumkin. Bu ochish (inglizcha unpacking) deyiladi:
toshkent = (41.31, 69.28)
kenglik, uzunlik = toshkent
print("Kenglik:", kenglik)
print("Uzunlik:", uzunlik)
sana = (21, "mart", 2027)
kun, oy, yil = sana
print(f"Navro'z: {kun}-{oy}, {yil}-yil")
6-darsda ko'rgan a, b = b, a almashtirish usuli ham aynan shu mexanizmga asoslangan: o'ng tomonda (b, a) korteji yaratiladi va darhol a va b ga ochiladi.
To'plam (set)
To'plam — takrorlanmaydigan qiymatlar to'plami. U figurali qavslar { } bilan yoziladi. Bir xil qiymatni ikki marta qo'shib bo'lmaydi — takrorlar avtomatik olib tashlanadi:
sonlar = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}
print(sonlar)
print(len(sonlar))
{1, 2, 3, 4, 5, 6, 9}
7
10 ta son yozdik, lekin to'plamda faqat 7 ta qoldi — takrorlar yo'qoldi.
To'plamda tartib yo'q: elementlar qanday tartibda chiqishi kafolatlanmaydi va indeks bilan murojaat qilib bo'lmaydi (toplam[0] — xato). Tartib kerak bo'lsa, sorted(toplam) ishlating — u saralangan ro'yxat qaytaradi.
Ro'yxatdan takrorlarni olib tashlash
To'plamning eng ko'p ishlatiladigan qo'llanishi — takrorlarni yo'qotish:
tashrif_buyuruvchilar = ["Ali", "Vali", "Ali", "Sora", "Vali", "Ali", "Hasan"]
noyob = set(tashrif_buyuruvchilar)
print("Jami tashriflar:", len(tashrif_buyuruvchilar))
print("Turli odamlar:", len(noyob))
print(sorted(noyob))
Jami tashriflar: 7 Turli odamlar: 4 ['Ali', 'Hasan', 'Sora', 'Vali']
Qo'shish va o'chirish
teglar = set() # bo'sh to'plam
teglar.add("python")
teglar.add("dasturlash")
teglar.add("python") # takror — hech narsa o'zgarmaydi
print(len(teglar))
teglar.discard("dasturlash")
print(teglar)
Bo'sh to'plam faqat set() bilan yaratiladi. Bo'sh figurali qavs {} esa bo'sh lug'at yaratadi — u bilan keyingi darsda tanishamiz.
remove(x) ham elementni o'chiradi, lekin x to'plamda bo'lmasa, xato beradi. discard(x) esa bunday holatda jim o'tib ketadi.
To'plamlar ustida amallar
Maktabdagi matematikadan tanish amallar Python'da ham bor:
| Amal | Belgi | Ma'nosi |
|---|---|---|
| Birlashma | a | b | Ikkalasidagi barcha elementlar |
| Kesishma | a & b | Ikkalasida ham bor elementlar |
| Ayirma | a - b | a da bor, lekin b da yo'q elementlar |
shaxmat = {"Aziz", "Dilnoza", "Jasur", "Malika"}
futbol = {"Jasur", "Bekzod", "Aziz", "Sardor"}
print("Ikkala to'garakda:", sorted(shaxmat & futbol))
print("Faqat shaxmatda:", sorted(shaxmat - futbol))
print("Jami o'quvchilar:", len(shaxmat | futbol))
Ikkala to'garakda: ['Aziz', 'Jasur'] Faqat shaxmatda: ['Dilnoza', 'Malika'] Jami o'quvchilar: 6
Qaysi birini tanlash kerak?
| Tuzilma | Yozilishi | Tartib | O'zgaradimi | Takror | Qachon |
|---|---|---|---|---|---|
| Ro'yxat | [1, 2] | bor | ha | mumkin | Ko'p hollarda — standart tanlov |
| Kortej | (1, 2) | bor | yo'q | mumkin | O'zgarmas, bog'liq ma'lumotlar |
| To'plam | {1, 2} | yo'q | ha | yo'q | Takrorlarni yo'qotish, umumiy elementlarni topish |
Mashqlar
1-mashq Turli so'zlar
Gapda nechta turli so'z borligini toping.
gap = "bir ikki bir uch ikki bir"
Yechimni ko'rish
gap = "bir ikki bir uch ikki bir" print(len(set(gap.split())))
2-mashq Umumiy sonlar
Ikki ro'yxatda ham uchraydigan sonlarni saralangan ro'yxat ko'rinishida chiqaring.
a = [1, 2, 3, 4, 5] b = [4, 5, 6, 7]
Yechimni ko'rish
a = [1, 2, 3, 4, 5] b = [4, 5, 6, 7] print(sorted(set(a) & set(b)))
3-mashq Sana
sana kortejini uchta o'zgaruvchiga oching va 1.9.1991 ko'rinishida chiqaring.
sana = (1, 9, 1991)
Yechimni ko'rish
sana = (1, 9, 1991) kun, oy, yil = sana print(kun, oy, yil, sep=".")
1991-yil 1-sentabr — O'zbekiston Mustaqilligi kuni.
4-mashq Yetishmayotgan raqamlar
Ro'yxatda 1 dan 10 gacha sonlarning ba'zilari yo'q. Qaysilari yetishmayotganini saralangan ro'yxat ko'rinishida toping.
mavjud = [7, 1, 3, 10, 4, 8, 6]
Ishora
set(range(1, 11)) — 1 dan 10 gacha barcha sonlar to'plami. Undan mavjudlarini ayiring.
Yechimni ko'rish
mavjud = [7, 1, 3, 10, 4, 8, 6] hammasi = set(range(1, 11)) print(sorted(hammasi - set(mavjud)))
O'zingizni sinang
Kortejning ro'yxatdan asosiy farqi nimada?
- Kortejda faqat sonlar bo'ladi
- Kortejni yaratilgandan keyin o'zgartirib bo'lmaydi
- Kortejda indekslar 1 dan boshlanadi
- Kortejda takror bo'lmaydi
To'g'ri. Kortej — o'zgarmas ketma-ketlik.
len({1, 2, 2, 3, 3, 3}) nimaga teng?
6132
To'g'ri. To'plamda takrorlar saqlanmaydi: faqat 1, 2, 3 qoladi.
Bo'sh to'plam qanday yaratiladi?
set(){}[]()
To'g'ri. {} — bo'sh lug'at, [] — bo'sh ro'yxat, () — bo'sh kortej.
{1, 2, 3} & {2, 3, 4} nimaga teng?
{1, 2, 3, 4}{1}{4}{2, 3}
To'g'ri. & — kesishma: ikkala to'plamda ham bor elementlar.
Xulosa
- Kortej
(1, 2, 3)— o'zgarmas ketma-ketlik. U bog'liq va o'zgarmas ma'lumotlar uchun qulay. - Kortejni o'zgaruvchilarga ochish mumkin:
kun, oy, yil = sana. - To'plam
{1, 2, 3}— takrorlanmas qiymatlar, tartibsiz. Bo'sh to'plam —set(). set(royxat)takrorlarni olib tashlaydi.|— birlashma,&— kesishma,-— ayirma.