Олонлог (Set)
Set бол давтагдахгүй өвөрмөц утгуудын цуглуулга юм. List шиг олон утга хадгалдаг ч хоёр гол онцлогтой: нэгдүгээрт, ижил утга хоёр удаа орж чадахгүй; хоёрдугаарт, дотоод дараалал (order) байхгүй тул index-ээр хандаж болохгүй.
Математикийн "олонлог" ойлголттой яг адил — {1, 2, 3} олонлогт 2-г хоёр удаа бичсэн ч нэг л 2 байна.
Set үүсгэх
Set-г {} хаалт ашиглан үүсгэнэ. Dictionary-тэй гадаад төрх адил боловч key: value хос байхгүй — зөвхөн утгууд байна:
өнгөнүүд = {"улаан", "ногоон", "цэнхэр"}
print(өнгөнүүд)
# {'ногоон', 'улаан', 'цэнхэр'} ← дараалал өөрчлөгдөж болно
List-с Set үүсгэх — давтагдсан утгыг арилгах хялбар арга:
тоонууд = [1, 2, 2, 3, 3, 3, 4]
өвөрмөц = set(тоонууд)
print(өвөрмөц) # {1, 2, 3, 4}
Хоосон Set үүсгэхдээ заавал set() гэж бичнэ — {} бичвэл хоосон Dictionary үүснэ:
хоосон_set = set() # зөв
хоосон_dict = {} # энэ нь Dictionary!
Set-н үндсэн үйлдлүүд
Утга нэмэх ба устгах
хотууд = {"Улаанбаатар", "Дархан", "Эрдэнэт"}
хотууд.add("Чойбалсан") # нэмэх
хотууд.discard("Дархан") # байгааг устгах, байхгүй бол алдаагүй
хотууд.remove("Эрдэнэт") # байгааг устгах, байхгүй бол KeyError
print(хотууд)
# {'Улаанбаатар', 'Чойбалсан'}
Утга байгаа эсэхийг шалгах
Set-д in шалгалт List-ийнхаас хамаагүй хурдан ажилладаг — энэ нь Set-н томоохон давуу тал:
зөвшөөрөгдсөн = {"admin", "editor", "moderator"}
хэрэглэгч_эрх = "editor"
if хэрэглэгч_эрх in зөвшөөрөгдсөн:
print("Нэвтрэх эрх байна")
else:
print("Эрх хүрэлцэхгүй байна")
Олонлогийн математик үйлдлүүд
Set-н хамгийн хүчирхэг онцлог нь математикийн олонлогийн үйлдлүүдийг шууд дэмждэгт оршино.
а = {1, 2, 3, 4, 5}
б = {4, 5, 6, 7, 8}
Нэгдэл (Union) — |
Хоёр олонлогийн нийт бүх утга:
нэгдэл = а | б
print(нэгдэл) # {1, 2, 3, 4, 5, 6, 7, 8}
Огтлолцол (Intersection) — &
Хоёр олонлогт хоёулаа байгаа утгууд:
огтлолцол = а & б
print(огтлолцол) # {4, 5}
Зөрүү (Difference) — -
Нэгд байгаа ч нөгөөд байхгүй утгууд:
зөрүү = а - б
print(зөрүү) # {1, 2, 3}
Тэгш хэмт зөрүү (Symmetric Difference) — ^
Аль нэгэнд байгаа ч хоёуланд нь байхгүй утгууд:
тэгш_хэмт = а ^ б
print(тэгш_хэмт) # {1, 2, 3, 6, 7, 8}
Бодит хэрэглээний жишээ
Set нь давтагдсан утгуудыг шүүх, хоёр бүлгийн хооронд харьцуулалт хийхэд маш тохиромжтой:
А_бүлэг_шалгалт = {"Болд", "Сарнай", "Төгс", "Анар"}
Б_бүлэг_шалгалт = {"Сарнай", "Бат", "Анар", "Энх"}
# Хоёр бүлэгт хоёулаа орсон сурагчид
хоёуланд = А_бүлэг_шалгалт & Б_бүлэг_шалгалт
print("Хоёр шалгалтад орсон:", хоёуланд)
# {'Сарнай', 'Анар'}
# Зөвхөн А бүлэгт орсон
зөвхөн_А = А_бүлэг_шалгалт - Б_бүлэг_шалгалт
print("Зөвхөн А бүлэгт:", зөвхөн_А)
# {'Болд', 'Төгс'}
Set дээр давталт
Set-г for давталтаар гүйлгэж болно — гэхдээ дараалал баталгаагүй гэдгийг санаарай:
үндэсний_баярууд = {"Цагаан сар", "Наадам", "Шинэ жил"}
for баяр in үндэсний_баярууд:
print(баяр)
Set vs List — хэзээ алийг ашиглах вэ?
| Нөхцөл | Ашиглах бүтэц |
| ----------------------------------- | ------------- |
| Давтагдахгүй байх ёстой | Set |
| Дараалал чухал | List |
| Index-ээр хандах хэрэгтэй | List |
| Хурдан in шалгалт хэрэгтэй | Set |
| Олонлогийн математик үйлдэл хэрэгтэй | Set |
Дараагийн хичээлд:
List Comprehension ба Dict Comprehension-г судална — давталт ашиглан List болон Dictionary-г нэг мөрөнд товч, уншихад хялбар байдлаар үүсгэх Python-ны хамгийн гоёмсог онцлогийг үзнэ.