Python / Олонлог (Set)

Олонлог (Set)

Set бол давтагдахгүй өвөрмөц утгуудын цуглуулга юм. List шиг олон утга хадгалдаг ч хоёр гол онцлогтой: нэгдүгээрт, ижил утга хоёр удаа орж чадахгүй; хоёрдугаарт, дотоод дараалал (order) байхгүй тул index-ээр хандаж болохгүй.

Математикийн "олонлог" ойлголттой яг адил — {1, 2, 3} олонлогт 2-г хоёр удаа бичсэн ч нэг л 2 байна.

Set үүсгэх

Set-г {} хаалт ашиглан үүсгэнэ. Dictionary-тэй гадаад төрх адил боловч key: value хос байхгүй — зөвхөн утгууд байна:

python
өнгөнүүд = {"улаан", "ногоон", "цэнхэр"}
print(өнгөнүүд)
# {'ногоон', 'улаан', 'цэнхэр'}  ← дараалал өөрчлөгдөж болно

List-с Set үүсгэх — давтагдсан утгыг арилгах хялбар арга:

python
тоонууд = [1, 2, 2, 3, 3, 3, 4]
өвөрмөц = set(тоонууд)
print(өвөрмөц)   # {1, 2, 3, 4}

Хоосон Set үүсгэхдээ заавал set() гэж бичнэ — {} бичвэл хоосон Dictionary үүснэ:

python
хоосон_set = set()        # зөв
хоосон_dict = {}          # энэ нь Dictionary!

Set-н үндсэн үйлдлүүд

Утга нэмэх ба устгах

python
хотууд = {"Улаанбаатар", "Дархан", "Эрдэнэт"}

хотууд.add("Чойбалсан")     # нэмэх
хотууд.discard("Дархан")    # байгааг устгах, байхгүй бол алдаагүй
хотууд.remove("Эрдэнэт")   # байгааг устгах, байхгүй бол KeyError

print(хотууд)
# {'Улаанбаатар', 'Чойбалсан'}

Утга байгаа эсэхийг шалгах

Set-д in шалгалт List-ийнхаас хамаагүй хурдан ажилладаг — энэ нь Set-н томоохон давуу тал:

python
зөвшөөрөгдсөн = {"admin", "editor", "moderator"}

хэрэглэгч_эрх = "editor"

if хэрэглэгч_эрх in зөвшөөрөгдсөн:
    print("Нэвтрэх эрх байна")
else:
    print("Эрх хүрэлцэхгүй байна")

Олонлогийн математик үйлдлүүд

Set-н хамгийн хүчирхэг онцлог нь математикийн олонлогийн үйлдлүүдийг шууд дэмждэгт оршино.

python
а = {1, 2, 3, 4, 5}
б = {4, 5, 6, 7, 8}

Нэгдэл (Union) — |

Хоёр олонлогийн нийт бүх утга:

python
нэгдэл = а | б
print(нэгдэл)   # {1, 2, 3, 4, 5, 6, 7, 8}

Огтлолцол (Intersection) — &

Хоёр олонлогт хоёулаа байгаа утгууд:

python
огтлолцол = а & б
print(огтлолцол)   # {4, 5}

Зөрүү (Difference) — -

Нэгд байгаа ч нөгөөд байхгүй утгууд:

python
зөрүү = а - б
print(зөрүү)   # {1, 2, 3}

Тэгш хэмт зөрүү (Symmetric Difference) — ^

Аль нэгэнд байгаа ч хоёуланд нь байхгүй утгууд:

python
тэгш_хэмт = а ^ б
print(тэгш_хэмт)   # {1, 2, 3, 6, 7, 8}

Бодит хэрэглээний жишээ

Set нь давтагдсан утгуудыг шүүх, хоёр бүлгийн хооронд харьцуулалт хийхэд маш тохиромжтой:

python
А_бүлэг_шалгалт = {"Болд", "Сарнай", "Төгс", "Анар"}
Б_бүлэг_шалгалт = {"Сарнай", "Бат", "Анар", "Энх"}

# Хоёр бүлэгт хоёулаа орсон сурагчид
хоёуланд = А_бүлэг_шалгалт & Б_бүлэг_шалгалт
print("Хоёр шалгалтад орсон:", хоёуланд)
# {'Сарнай', 'Анар'}

# Зөвхөн А бүлэгт орсон
зөвхөн_А = А_бүлэг_шалгалт - Б_бүлэг_шалгалт
print("Зөвхөн А бүлэгт:", зөвхөн_А)
# {'Болд', 'Төгс'}

Set дээр давталт

Set-г for давталтаар гүйлгэж болно — гэхдээ дараалал баталгаагүй гэдгийг санаарай:

python
үндэсний_баярууд = {"Цагаан сар", "Наадам", "Шинэ жил"}

for баяр in үндэсний_баярууд:
    print(баяр)

Set vs List — хэзээ алийг ашиглах вэ?

| Нөхцөл | Ашиглах бүтэц | | ----------------------------------- | ------------- | | Давтагдахгүй байх ёстой | Set | | Дараалал чухал | List | | Index-ээр хандах хэрэгтэй | List | | Хурдан in шалгалт хэрэгтэй | Set | | Олонлогийн математик үйлдэл хэрэгтэй | Set |

Дараагийн хичээлд:

List Comprehension ба Dict Comprehension-г судална — давталт ашиглан List болон Dictionary-г нэг мөрөнд товч, уншихад хялбар байдлаар үүсгэх Python-ны хамгийн гоёмсог онцлогийг үзнэ.