List ба Dict Comprehension
Comprehension бол Python-ны хамгийн гоёмсог онцлогуудын нэг юм. Олон мөрийн for давталтыг нэг мөрөнд товч бичих арга — ингэснээр код уншихад хялбар, бичихэд хурдан болдог.
Эхлэгчид эхэндээ арай ер бусын харагдах ч дасаад унших дуртай болчихдог. Аажмаар сур — эхлээд for давталтаар бодоод дараа нь comprehension болгоорой.
List Comprehension
Үндсэн хэлбэр
Уламжлалт for давталтаар:
# Энгийн давталт
тоонууд = []
for i in range(1, 6):
тоонууд.append(i * 2)
print(тоонууд) # [2, 4, 6, 8, 10]
List Comprehension ашиглан:
тоонууд = [i * 2 for i in range(1, 6)]
print(тоонууд) # [2, 4, 6, 8, 10]
Хоёр хувилбар яг ижил үр дүн гаргана — зөвхөн бичлэгийн хэлбэр өөр.
Бүтэц
[үр_дүн for хувьсагч in цуглуулга]
- үр_дүн — шинэ list-ийн элемент болох илэрхийлэл
- хувьсагч — давталтын хувьсагч
- цуглуулга — давтах объект
Нөхцөл нэмэх (if)
Comprehension-д if нэмж зөвхөн нөхцөл хангасан элементүүдийг шүүж авч болно:
тоонууд = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Зөвхөн тэгш тоонуудыг авах
тэгш = [n for n in тоонууд if n % 2 == 0]
print(тэгш) # [2, 4, 6, 8, 10]
# 5-аас их тоонуудыг квадратлах
том = [n ** 2 for n in тоонууд if n > 5]
print(том) # [36, 49, 64, 81, 100]
Бодит жишээ
нэрс = [" Болд ", "Сарнай ", " Төгс"]
# Цагаан зайг арилгаж, том үсгээр эхлүүлэх
цэвэр_нэрс = [нэр.strip().title() for нэр in нэрс]
print(цэвэр_нэрс) # ['Болд', 'Сарнай', 'Төгс']
оноонууд = [45, 82, 91, 60, 73, 55, 88]
# Тэнцсэн сурагчдын оноо (60+)
тэнцсэн = [оноо for оноо in оноонууд if оноо >= 60]
print(тэнцсэн) # [82, 91, 60, 73, 88]
Dict Comprehension
Dict Comprehension нь Dictionary-г товч аргаар үүсгэнэ. Бүтэц нь List Comprehension-тай ижил ч {} хаалт болон key: value хосыг ашигладаг:
{key_илэрхийлэл: value_илэрхийлэл for хувьсагч in цуглуулга}
Жишээ
нэрс = ["Болд", "Сарнай", "Төгс"]
# Нэр → нэрийн урт
урт_толь = {нэр: len(нэр) for нэр in нэрс}
print(урт_толь)
# {'Болд': 4, 'Сарнай': 6, 'Төгс': 4}
тоонууд = range(1, 6)
# Тоо → квадрат
квадрат = {n: n ** 2 for n in тоонууд}
print(квадрат)
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Нөхцөл нэмэх
оноо = {"Болд": 85, "Сарнай": 55, "Төгс": 92, "Анар": 48}
# Зөвхөн тэнцсэн сурагчдыг авах
тэнцсэн = {нэр: дүн for нэр, дүн in оноо.items() if дүн >= 60}
print(тэнцсэн)
# {'Болд': 85, 'Төгс': 92}
Set Comprehension
Set Comprehension ч бий — {} хаалт ашиглана, Dict Comprehension-с ялгаа нь key: value хос байхгүй:
тоонууд = [1, 2, 2, 3, 3, 3, 4]
өвөрмөц_квадрат = {n ** 2 for n in тоонууд}
print(өвөрмөц_квадрат) # {1, 4, 9, 16}
Comprehension vs давталт — хэзээ алийг ашиглах вэ?
Comprehension нь товч боловч хэт нарийн төвөгтэй болбол уншихад хэцүү болдог. Дараах зөвлөмжийг дагаарай:
# ✅ Хялбар — comprehension тохиромжтой
квадратууд = [x ** 2 for x in range(10)]
# ✅ Нөхцөлтэй — comprehension тохиромжтой
тэгш = [x for x in range(20) if x % 2 == 0]
# ⚠️ Хэт нарийн — энгийн давталт илүү уншигдахуйц
# Шүүмжгүй ашиглавал код ойлгоход хэцүү болно
Нэг comprehension нэг зорилготой байх ёстой. Хоёр давталт шаардагдах бол ихэвчлэн тусдаа for давталт ашиглах нь дээр.
Дараагийн хичээлд:
Задлан авах (Unpacking) техникийг судална — tuple, list, dictionary-н утгуудыг нэг дор хэд хэдэн хувьсагчид хуваан оноох, функцийн argument-д *args болон **kwargs ашиглах аргуудыг үзнэ.