8. Kolleksiyalar

Python'da bir nechta qiymatlarni bir joyda saqlash uchun kolleksiyalar ishlatiladi.

Asosiy kolleksiya turlari:

list
tuple
set
dictionary

Har birining o‘ziga xos vazifasi bor.


List

list bir nechta qiymatlarni tartibli holda saqlaydi.

mevalar = [
    "olma",
    "banan",
    "anor"
]

print(
    mevalar
)

Natija:

['olma', 'banan', 'anor']

List:

Tartibli
O‘zgaruvchan
Takroriy qiymatlarga ruxsat beradi
Indeks bilan ishlaydi

List indekslari

mevalar = [
    "olma",
    "banan",
    "anor"
]

Indekslar:

0 → olma
1 → banan
2 → anor

Masalan:

print(
    mevalar[0]
)

print(
    mevalar[2]
)

Natija:

olma
anor

Manfiy indeks

print(
    mevalar[-1]
)

Natija:

anor
-3 → olma
-2 → banan
-1 → anor

List slicing

List ham slicingni qo‘llab-quvvatlaydi.

sonlar = [
    10,
    20,
    30,
    40,
    50
]

print(
    sonlar[1:4]
)

Natija:

[20, 30, 40]

Listni o‘zgartirish

List mutable bo‘lgani uchun elementni o‘zgartirish mumkin.

mevalar = [
    "olma",
    "banan",
    "anor"
]

mevalar[1] = "uzum"

print(
    mevalar
)

Natija:

['olma', 'uzum', 'anor']

append()

List oxiriga yangi element qo‘shadi.

mevalar = [
    "olma",
    "banan"
]

mevalar.append(
    "anor"
)

print(
    mevalar
)

Natija:

['olma', 'banan', 'anor']

insert()

Ma’lum indeksga element qo‘shadi.

mevalar = [
    "olma",
    "anor"
]

mevalar.insert(
    1,
    "banan"
)

print(
    mevalar
)

Natija:

['olma', 'banan', 'anor']

extend()

Bir listdagi elementlarni boshqa listga qo‘shadi.

birinchi_royxat = [
    1,
    2,
    3
]

ikkinchi_royxat = [
    4,
    5,
    6
]

birinchi_royxat.extend(
    ikkinchi_royxat
)

print(
    birinchi_royxat
)

Natija:

[1, 2, 3, 4, 5, 6]

remove()

Berilgan qiymatning birinchi uchraganini o‘chiradi.

mevalar = [
    "olma",
    "banan",
    "anor"
]

mevalar.remove(
    "banan"
)

print(
    mevalar
)

Natija:

['olma', 'anor']

Agar qiymat mavjud bo‘lmasa, ValueError yuz beradi.


pop()

Indeks bo‘yicha elementni olib tashlaydi va uni qaytaradi.

mevalar = [
    "olma",
    "banan",
    "anor"
]

olingan_meva = mevalar.pop(
    1
)

print(
    olingan_meva
)

print(
    mevalar
)

Natija:

banan
['olma', 'anor']

Argument bermasak, oxirgi element olinadi:

mevalar = [
    "olma",
    "banan",
    "anor"
]

olingan_meva = mevalar.pop()

print(
    olingan_meva
)

Natija:

anor

clear()

Listdagi barcha elementlarni o‘chiradi.

mevalar = [
    "olma",
    "banan",
    "anor"
]

mevalar.clear()

print(
    mevalar
)

Natija:

[]

index()

Elementning indeksini topadi.

mevalar = [
    "olma",
    "banan",
    "anor"
]

joylashuv = mevalar.index(
    "banan"
)

print(
    joylashuv
)

Natija:

1

count()

Element necha marta uchraganini hisoblaydi.

sonlar = [
    1,
    2,
    2,
    3,
    2
]

soni = sonlar.count(
    2
)

print(
    f"2 soni {soni} marta uchradi."
)

Natija:

2 soni 3 marta uchradi.

sort()

Listni tartiblaydi.

sonlar = [
    5,
    2,
    8,
    1,
    3
]

sonlar.sort()

print(
    sonlar
)

Natija:

[1, 2, 3, 5, 8]

Teskari tartib:

sonlar.sort(
    reverse=True
)

print(
    sonlar
)

Natija:

[8, 5, 3, 2, 1]

sorted()

sorted() yangi tartiblangan list qaytaradi.

sonlar = [
    5,
    2,
    8,
    1,
    3
]

tartiblangan_sonlar = sorted(
    sonlar
)

print(
    sonlar
)

print(
    tartiblangan_sonlar
)

Birinchi list o‘zgarmaydi.


reverse()

List elementlarining tartibini teskariga aylantiradi.

mevalar = [
    "olma",
    "banan",
    "anor"
]

mevalar.reverse()

print(
    mevalar
)

Natija:

['anor', 'banan', 'olma']

Listni nusxalash

Quyidagi kod kutilganidek mustaqil nusxa yaratmaydi:

birinchi_royxat = [
    1,
    2,
    3
]

ikkinchi_royxat = birinchi_royxat

ikkinchi_royxat.append(
    4
)

print(
    birinchi_royxat
)

Natija:

[1, 2, 3, 4]

Chunki ikkala o‘zgaruvchi bir xil list obyektiga murojaat qilmoqda.

Nusxa olish:

birinchi_royxat = [
    1,
    2,
    3
]

ikkinchi_royxat = birinchi_royxat.copy()

ikkinchi_royxat.append(
    4
)

print(
    birinchi_royxat
)

print(
    ikkinchi_royxat
)

Natija:

[1, 2, 3]
[1, 2, 3, 4]

Tuple

Tuple listga o‘xshaydi, lekin o‘zgarmas kolleksiya hisoblanadi.

mevalar = (
    "olma",
    "banan",
    "anor"
)

print(
    mevalar
)

Tuple:

Tartibli
O‘zgarmas
Indeks bilan ishlaydi
Takroriy qiymatlarga ruxsat beradi

Tuple indekslari

mevalar = (
    "olma",
    "banan",
    "anor"
)

print(
    mevalar[0]
)

print(
    mevalar[-1]
)

Tuple o‘zgarmaydi

Quyidagi kod xatolik beradi:

mevalar = (
    "olma",
    "banan",
    "anor"
)

mevalar[0] = "uzum"

Tuple yaratilgandan keyin uning elementlarini o‘zgartirib bo‘lmaydi.


Tuple unpacking

Tuple qiymatlarini bir nechta o‘zgaruvchiga ajratish mumkin.

foydalanuvchi = (
    "Softromeda",
    25,
    "Dasturchi"
)

ism, yosh, kasb = foydalanuvchi

print(
    ism
)

print(
    yosh
)

print(
    kasb
)

* bilan unpacking

sonlar = (
    10,
    20,
    30,
    40,
    50
)

birinchi_son, *qolgan_sonlar = sonlar

print(
    birinchi_son
)

print(
    qolgan_sonlar
)

Natija:

10
[20, 30, 40, 50]

Set

Set takrorlanmaydigan elementlar to‘plamidir.

mevalar = {
    "olma",
    "banan",
    "anor"
}

print(
    mevalar
)

Setning asosiy xususiyatlari:

Takroriy elementlarni saqlamaydi
Indeksga ega emas
O‘zgaruvchan
Matematik to‘plam amallarini qo‘llab-quvvatlaydi

Setdagi takroriy qiymatlar

sonlar = {
    1,
    2,
    2,
    3,
    3,
    3
}

print(
    sonlar
)

Natijada har bir qiymat faqat bir marta qoladi:

{1, 2, 3}

Bo‘sh set

Quyidagisi bo‘sh dictionary yaratadi:

qiymatlar = {}

Bo‘sh set yaratish uchun:

qiymatlar = set()

add()

Setga element qo‘shadi.

mevalar = {
    "olma",
    "banan"
}

mevalar.add(
    "anor"
)

print(
    mevalar
)

remove()

Setdan elementni o‘chiradi.

mevalar = {
    "olma",
    "banan",
    "anor"
}

mevalar.remove(
    "banan"
)

print(
    mevalar
)

Element mavjud bo‘lmasa, xatolik beradi.


discard()

discard() ham elementni o‘chiradi, lekin element mavjud bo‘lmasa xatolik bermaydi.

mevalar = {
    "olma",
    "banan"
}

mevalar.discard(
    "anor"
)

print(
    mevalar
)

Set amallari

Setlar bilan matematik to‘plam amallarini bajarish mumkin.

Ikki to‘plam:

birinchi_toplam = {
    1,
    2,
    3,
    4
}

ikkinchi_toplam = {
    3,
    4,
    5,
    6
}

Union

Ikki to‘plamning barcha elementlari:

natija = (
    birinchi_toplam
    | ikkinchi_toplam
)

print(
    natija
)

Natija:

{1, 2, 3, 4, 5, 6}

Intersection

Ikkalasida ham mavjud elementlar:

natija = (
    birinchi_toplam
    & ikkinchi_toplam
)

print(
    natija
)

Natija:

{3, 4}

Difference

Faqat birinchi to‘plamda mavjud elementlar:

natija = (
    birinchi_toplam
    - ikkinchi_toplam
)

print(
    natija
)

Natija:

{1, 2}

Symmetric difference

Faqat bittasida mavjud bo‘lgan elementlar:

natija = (
    birinchi_toplam
    ^ ikkinchi_toplam
)

print(
    natija
)

Natija:

{1, 2, 5, 6}

Dictionary

Dictionary kalit va qiymat juftliklarini saqlaydi.

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25,
    "kasb": "Dasturchi"
}

print(
    foydalanuvchi
)

Dictionary:

Kalit → qiymat

Masalan:

"ism" → "Softromeda"
"yosh" → 25
"kasb" → "Dasturchi"

Dictionary qiymatini olish

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

print(
    foydalanuvchi["ism"]
)

Natija:

Softromeda

get()

Kalit mavjud bo‘lmasa xatolik bermaslik uchun get() ishlatilishi mumkin.

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

kasb = foydalanuvchi.get(
    "kasb"
)

print(
    kasb
)

Natija:

None

Standart qiymat berish:

kasb = foydalanuvchi.get(
    "kasb",
    "Noma'lum"
)

print(
    kasb
)

Natija:

Noma'lum

Dictionary qiymatini o‘zgartirish

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

foydalanuvchi["yosh"] = 26

print(
    foydalanuvchi
)

Dictionaryga yangi qiymat qo‘shish

foydalanuvchi = {
    "ism": "Softromeda"
}

foydalanuvchi["kasb"] = "Dasturchi"

print(
    foydalanuvchi
)

update()

Bir nechta qiymatni birdaniga qo‘shish yoki yangilash:

foydalanuvchi = {
    "ism": "Softromeda"
}

foydalanuvchi.update(
    {
        "yosh": 25,
        "kasb": "Dasturchi"
    }
)

print(
    foydalanuvchi
)

keys()

Dictionary kalitlarini olish:

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25,
    "kasb": "Dasturchi"
}

print(
    foydalanuvchi.keys()
)

values()

Qiymatlarni olish:

print(
    foydalanuvchi.values()
)

items()

Kalit va qiymat juftliklarini olish:

print(
    foydalanuvchi.items()
)

Sikl bilan:

for kalit, qiymat in foydalanuvchi.items():

    print(
        f"{kalit}: {qiymat}"
    )

Dictionarydan o‘chirish

pop():

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

yosh = foydalanuvchi.pop(
    "yosh"
)

print(
    yosh
)

print(
    foydalanuvchi
)

popitem()

Oxirgi kalit-qiymat juftligini olib tashlaydi:

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25,
    "kasb": "Dasturchi"
}

juftlik = foydalanuvchi.popitem()

print(
    juftlik
)

print(
    foydalanuvchi
)

del

Ma’lum kalitni o‘chirish:

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

del foydalanuvchi["yosh"]

print(
    foydalanuvchi
)

Dictionaryni tozalash

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

foydalanuvchi.clear()

print(
    foydalanuvchi
)

Natija:

{}

Ichma-ich kolleksiyalar

Kolleksiyalar boshqa kolleksiyalarni o‘z ichiga olishi mumkin.

foydalanuvchilar = [
    {
        "ism": "Softromeda",
        "yosh": 25
    },
    {
        "ism": "Ali",
        "yosh": 30
    }
]

Bu:

list
  └── dictionary

tuzilmasidir.


Murakkab ma’lumotlar

Masalan:

dastur = {
    "nomi": "Softromeda",
    "foydalanuvchilar": [
        {
            "ism": "Ali",
            "yosh": 25
        },
        {
            "ism": "Vali",
            "yosh": 30
        }
    ]
}

Foydalanuvchi nomini olish:

birinchi_foydalanuvchi = (
    dastur["foydalanuvchilar"][0]
)

print(
    birinchi_foydalanuvchi["ism"]
)

Natija:

Ali

Kolleksiyalarni solishtirish

Listlar qiymatlari bo‘yicha solishtiriladi:

birinchi_royxat = [
    1,
    2,
    3
]

ikkinchi_royxat = [
    1,
    2,
    3
]

print(
    birinchi_royxat == ikkinchi_royxat
)

Natija:

True

in bilan kolleksiyalar

List:

mevalar = [
    "olma",
    "banan"
]

if "olma" in mevalar:

    print(
        "Olma mavjud."
    )

Set:

mevalar = {
    "olma",
    "banan"
}

if "olma" in mevalar:

    print(
        "Olma mavjud."
    )

Dictionaryda in kalitlarni tekshiradi:

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

if "ism" in foydalanuvchi:

    print(
        "Ism kaliti mavjud."
    )

Kolleksiya tanlash

Qaysi kolleksiyani ishlatishni vazifaga qarab tanlash kerak.

list
→ tartibli va o‘zgaruvchan ma’lumotlar

tuple
→ tartibli va o‘zgarmas ma’lumotlar

set
→ noyob qiymatlar va to‘plam amallari

dictionary
→ kalit va qiymat orqali ma’lumot saqlash

Masalan:

mevalar = [
    "olma",
    "banan",
    "anor"
]

Tartib muhim bo‘lsa list.

koordinata = (
    41.31,
    69.28
)

O‘zgarmas juftlik uchun tuple.

noyob_raqamlar = {
    1,
    2,
    3
}

Takrorlanmaydigan qiymatlar uchun set.

foydalanuvchi = {
    "ism": "Softromeda",
    "yosh": 25
}

Nomlangan ma’lumotlar uchun dictionary.


Amaliy mashqlar

Mashq 1

5 ta meva saqlaydigan list yarating va barcha elementlarni chiqaring.

Mashq 2

Listga yangi element qo‘shing va undan bitta elementni o‘chiring.

Mashq 3

Listdagi sonlarni o‘sish tartibida tartiblang.

Mashq 4

Tuple yordamida foydalanuvchining ism, yosh va kasbini saqlang.

Mashq 5

Takroriy sonlardan iborat listni set yordamida noyob qiymatlarga aylantiring.

Mashq 6

Ikki setning umumiy elementlarini toping.

Mashq 7

Foydalanuvchi ma’lumotlarini dictionaryda saqlang.

Mashq 8

Dictionarydagi barcha kalit va qiymatlarni chiqaring.

Mashq 9

List ichida bir nechta foydalanuvchi dictionarylarini yarating va ularni sikl bilan chiqaring.

Mashq 10

Mahsulot nomi, narxi va miqdorini dictionaryda saqlab, umumiy narxni hisoblang.


Mini loyiha — Softromeda foydalanuvchilar tizimi

Bir nechta foydalanuvchini list va dictionary yordamida boshqaramiz.

foydalanuvchilar = [
    {
        "ism": "Softromeda",
        "yosh": 25,
        "kasb": "Dasturchi"
    },
    {
        "ism": "Ali",
        "yosh": 30,
        "kasb": "Muhandis"
    },
    {
        "ism": "Vali",
        "yosh": 22,
        "kasb": "Dizayner"
    }
]

for foydalanuvchi in foydalanuvchilar:

    print(
        "--------------------"
    )

    print(
        f"Ism: {foydalanuvchi['ism']}"
    )

    print(
        f"Yosh: {foydalanuvchi['yosh']}"
    )

    print(
        f"Kasb: {foydalanuvchi['kasb']}"
    )

Natija:

--------------------
Ism: Softromeda
Yosh: 25
Kasb: Dasturchi
--------------------
Ism: Ali
Yosh: 30
Kasb: Muhandis
--------------------
Ism: Vali
Yosh: 22
Kasb: Dizayner

Bob xulosasi

Bu bobda Python kolleksiyalarini chuqurroq o‘rgandik.

Asosiy turlar:

list
tuple
set
dictionary

List bilan:

append()
insert()
extend()
remove()
pop()
clear()
index()
count()
sort()
sorted()
reverse()
copy()

Tuple bilan:

indeks
slicing
unpacking

Set bilan:

add()
remove()
discard()
union
intersection
difference
symmetric difference

Dictionary bilan:

get()
keys()
values()
items()
update()
pop()
popitem()
clear()

Shuningdek, murakkab ma’lumotlarni:

list ichida dictionary
dictionary ichida list
dictionary ichida dictionary

kabi shakllarda saqlashni ko‘rdik.

Keyingi bobda Python'da modullar va paketlar yordamida kodni bir nechta faylga ajratish va tayyor funksiyalardan foydalanishni o‘rganamiz.