AXV

Set: takrorlanmaydigan to‘plam

Dublikatlarni bir zumda yo‘qotamiz va «bormi?» savoliga tez javob beramiz

9-sinfAdvanced Back-end va DevOps5-hafta · 14-dars

Bugun nimalarni o‘rganamiz?

Set nima?

5 ta xususiyat: unikal, tez, indekssiz, tartibsiz, mutable

Yaratish va o‘zgartirish

{ }, set(), add(), remove()

Amaliy usullar

Birlashtirish, dublikatni olib tashlash, tartiblash

Muammo: bir ism - besh marta

Ro‘yxat (list)

["Ali", "Laylo", "Ali", "Sardor", "Ali"] - to‘garakka Ali uch marta yozilib qoldi.

Bizga kerak

Har bir o‘quvchi faqat bir marta: {"Ali", "Laylo", "Sardor"}

01

Set nima?

Takrorlanmaydigan (unique) elementlar to‘plami

Set ichiga dublikat kirmaydi

list "Ali" "Laylo" "Ali" "Sardor" "Ali" set( ) set "Ali" "Laylo" "Sardor"

Set xususiyatlari (1.74-rasm)

Takror yo‘q

bosing

{1, 1, 2} -> {1, 2}

in juda tez

bosing

"Ali" in s - millionlab elementda ham bir zumda.

Indeks yo‘q

bosing

s[0] ishlamaydi: TypeError.

Tartib kafolatlanmaydi

bosing

Ko‘p hollarda tartib baribir kerak bo‘lmaydi.

Mutable

bosing

Qo‘shish va o‘chirish mumkin.

Birinchi set


mevalar = {"olma", "nok", "olma", "uzum"}
print(mevalar)           # {'nok', 'olma', 'uzum'}
print("nok" in mevalar)  # True
        
Chiqish tartibi sizda boshqacha bo‘lishi mumkin - bu xato emas.
02

Yaratish va o‘zgartirish

Bo‘sh set tuzog‘i, add() va remove()

Bo‘sh set tuzog‘i (1.75-rasm)

a = {} <class 'dict'> bu set emas! b = set() <class 'set'> to‘g‘ri yo‘l

Qo‘shish va o‘chirish (1.76-rasm)

PythonSQL

tillar = {"Python", "SQL"}
        

Qo‘shish va o‘chirish (1.76-rasm)

PythonBash

tillar = {"Python", "SQL"}
tillar.add("Bash")
tillar.add("Python")   # takror: qo'shilmaydi
tillar.remove("SQL")
print(tillar)          # {'Python', 'Bash'}
        

Setda «birinchi element» yo‘q


s = {10, 20, 30}
print(s[0])
        
TypeError: 'set' object is not subscriptable
Elementni olish o‘rniga so‘raymiz: 20 in s -> True

Mini-test

Bo‘sh set qanday yaratiladi?

{} - bo‘sh dict, [] - list, () - tuple. Bo‘sh set faqat set().
03

Amaliy usullar

Birlashtirish, dublikatni olib tashlash, tartiblash

Ikki setni birlashtirish (1.77, 1.78-rasm)

Ali Vali Sardor Laylo a | b -> {Ali, Vali, Laylo, Sardor}

Chuqurroq: pastga

Birlashtirish: kodda


a_guruh = {"Ali", "Vali", "Laylo"}
b_guruh = {"Laylo", "Sardor"}
hammasi = a_guruh | b_guruh
print(hammasi)       # 4 ta ism, Laylo bir marta
print(a_guruh.union(b_guruh))  # xuddi shu natija
          

Dublikatni olib tashlash va tartiblash (1.79-rasm)

[1, 2, 2, 3, 3, 3, 4] nums (list) {1, 2, 3, 4} set(nums) [1, 2, 3, 4] sorted(...) print(sorted(set(nums))) -> takrorsiz va tartibli

Oldin va keyin

8 ta yozuv

["Ali", "Vali", "Ali", "Laylo", "Vali", "Ali", "Madina", "Laylo"] - kim nechta ekanini sanash qiyin.

4 ta mehmon

len(set(royxat)) -> 4. sorted() -> ['Ali', 'Laylo', 'Madina', 'Vali']

0
yozuv (list)
0
mehmon (set)

Real hayotda set

Login kiritildi
in bloklangan
Ruxsat / taqiq

bloklangan = {"spam_bot", "fake_user"}
if login in bloklangan:
    print("Kirish taqiqlangan!")
        

Bu kod nima chiqaradi?

s = {1, 2, 3}; s.add(2); s.add(4); print(len(s))

2 allaqachon bor, qo‘shilmaydi. 4 yangi - qo‘shiladi: {1, 2, 3, 4}.

Odatiy xatolar

s = {}

So‘ng s.add(1) -> AttributeError. Bo‘sh set: set().

s[0]

Indeks yo‘q. Bor-yo‘qligini in bilan tekshiring.

Tartibga ishonish

Tartib kerak bo‘lsa - sorted().

Amaliy topshiriq 20 daqiqa

Oson[4, 1, 4, 2, 1, 5] dan takrorlarni olib tashlab, tartiblangan holda chiqaring.
O'rtaKodda 2 ta xatoni toping: mevalar = {}, mevalar.add("olma"), print(mevalar[0]).
QiyinKiritilgan so‘zdagi takrorlanmas harflarni alifbo tartibida va sonini chiqaring (lower(), set(), sorted()).

Xulosa

Bugun o‘rgandik

Set - unikal elementlar. Bo‘sh set: set(). add(), remove(), a | b, set(nums), sorted().

Uyga vazifa

set_mashq.py: takrorsiz tartiblash, o‘yinlar birlashmasi, bloklangan login.

Keyingi dars: dictionary - kalit va qiymat. Bo‘sh {} aynan uniki!