Ачааллж байна...
Tuple гэдэг үг энэ курсэд аль хэдийн олон удаа гарч ирсэн. Бүлэг 2-т zip ба enumerate нь "хос" өгдөг гэж хэлээд, тэр хос нь үнэндээ tuple гэж дурдсан. Бүлэг 3-т *args нь tuple болдог гэж үзсэн. Функц олон утга буцаахад тэр нь үнэндээ tuple савладаг гэж хэлсэн. Бүлэг 4-т list[tuple[str, int]] гэсэн hint бичсэн.
Тэр бүх тохиолдолд би "tuple-ийг Бүлэг 5-д бүрэн үзнэ" гэж амласан. Одоо тэр цаг болжээ.
Tuple бол list-тэй маш төстэй бүтэц: элементүүдийн эмх цэгцтэй дараалал, index-ээр хандаж болно, loop хийж болно, len() авч болно. Ганц ялгаа нь: tuple нь өөрчлөгдөшгүй (immutable). Нэг удаа үүссэн бол дотор нь юу ч нэмж, хасч, өөрчилж чадахгүй.
Эхлээд харахад энэ нь ХЯЗГААРЛАЛТ мэт санагдана. "Яагаад надад өөрчилж болдоггүй жагсаалт хэрэгтэй юм бэ? Бүрэн list ашиглавал болохгүй гэж үү?" Энэ хичээлийн гол зорилго бол тэр асуултад хариулах, мөн өөрчлөгдөшгүй байдал нь яагаад ХЯЗГААРЛАЛТ биш, харин ДАВУУ ТАЛ болдгийг харуулах явдал юм.
Курс 1-ийн шошготой хайрцгийн зүйрлэлийг үргэлжлүүлье.
List бол нээлттэй хайрцаг. Та хүссэн үедээ нээж, юм нэмж, хасч, солиж болно. Хэрэгслийн хайрцаг гэж бодоорой — өнөөдөр алх нэмнэ, маргааш хясаа хасна.
Tuple бол БИТҮҮМЖИЛСЭН хайрцаг. Түүнийг үйлдвэрт савлаж, лацдаж, дараа нь хэн ч нээж чадахгүй. Та дотор нь юу байгааг ХАРЖ чадна (шилэн хана байна гэж бодъё), гэхдээ өөрчилж чадахгүй.
Яагаад хэн нэгэн битүүмжилсэн хайрцаг хүсэх вэ?
Хариулт нь: баталгаа. Хэрэв би танд битүүмжилсэн хайрцаг өгвөл, та түүнийг арван хүнд дамжуулж, эргүүлж авахад дотор нь ЯГ ТЭР ЗҮЙЛ байна гэдгийг мэдэж байна. Хэн ч өөрчлөөгүй, өөрчилж ч чадахгүй. Тэр итгэлцэл нь маш үнэ цэнэтэй.
Программын ертөнцөд ижил санаа ажилладаг. Хэрэв та функцэд list дамжуулбал, тэр функц түүнийг ЧИМЭЭГҮЙ өөрчилж чадна (Хичээл 3.4-ийн mutable объектын зан төлөвийг санаж байгаа байх). Хэрэв tuple дамжуулбал — тэр боломжгүй. Таны өгөгдөл аюулгүй.
python
tsegleg: tuple[int, int] = (10, 20)
print(tsegleg)
print(tsegleg[0])
print(tsegleg[1])
print(len(tsegleg))Үр дүн:
(10, 20)
10
20
2Дугуй хаалт нь tuple-ийн танигдах шинж. List нь дөрвөлжин хаалт ([ ]), tuple нь дугаар хаалт (( )).
Index-ээр хандах, len() авах — бүгд list-тэй ижил. Slicing ч бас ажиллана:
python
tootsuud: tuple[int, ...] = (10, 20, 30, 40, 50)
print(tootsuud[1:4])
print(tootsuud[::-1])(20, 30, 40)
(50, 40, 30, 20, 10)Slicing нь tuple-аас ШИНЭ tuple буцаадгийг анзаараарай (дугуй хаалттай). Бүлэг 2-ын бүх slicing мэдлэг энд шууд ажиллаж байна.
Loop ч бас:
python
for too in tootsuud:
print(too)10
20
30
40
50Одоохондоо list-тэй ямар ч ялгаа алга. Ялгаа нь одоо гарч ирнэ.
python
tsegleg: tuple[int, int] = (10, 20)
tsegleg[0] = 99Traceback (most recent call last):
File "main.py", line 3, in <module>
tsegleg[0] = 99
TypeError: 'tuple' object does not support item assignmentTypeError: 'tuple' object does not support item assignment гэдэг нь "tuple нь элементэд утга олгохыг дэмждэггүй" гэсэн үг. Хайрцаг битүүмжилсэн байна.
Бүлэг 2-ын slicing хичээлээс TypeError: 'str' object does not support item assignment гэсэн алдааг санаж байгаа байх? Яг ижил мессеж, зөвхөн str -ийн оронд tuple. Учир нь string ч бас immutable — тэр нь Python-д tuple-тэй ижил ангилалд багтдаг.
Бусад өөрчлөх оролдлогууд ч бас бүтэлгүйтнэ:
python
tsegleg.append(30)Traceback (most recent call last):
File "main.py", line 3, in <module>
tsegleg.append(30)
AttributeError: 'tuple' object has no attribute 'append'AttributeError: 'tuple' object has no attribute 'append' — "tuple-д append гэсэн method байхгүй." Логиктой: append нь өөрчлөх үйлдэл, tuple нь өөрчлөгддөггүй тул тийм method огт байхгүй. Мөн remove, pop, sort, insert — эдгээр бүгд байхгүй.
Tuple-д ЗӨВХӨН ХОЁР method байдаг: count() (ямар нэг утга хэдэн удаа байгааг тоолно) ба index() (ямар нэг утга хаана байгааг олно). Хоёулаа зөвхөн УНШИНА, өөрчлөхгүй.
python
tootsuud: tuple[int, ...] = (10, 20, 30, 20, 10)
print(tootsuud.count(20))
print(tootsuud.index(30))2
2Одоо tuple-ийн жинхэнэ хэрэглээ рүү орно. Тэр нь list-ээс тэс өөр зорилготой.
List бол НЭГ ТӨРЛИЙН ОЛОН зүйл. Нэрсийн жагсаалт. Тоонуудын жагсаалт. Барааны жагсаалт. Элемент бүр ижил утгатай, зөвхөн өөр өөр жишээ. Урт нь өөрчлөгдөж болно — шинэ нэр нэмэгдэж, хуучин нь хасагдана.
Tuple бол ӨӨР ТӨРЛИЙН ЦӨӨН зүйл, тогтмол бүтэцтэй. Элемент бүр өөрийн УТГА, өөрийн БАЙРЛАЛТАЙ. Урт нь хэзээ ч өөрчлөгдөхгүй, учир нь бүтэц нь тогтмол.
Жишээ:
python
# Tuple — координат. Эхнийх нь ҮРГЭЛЖ x, хоёр дахь нь ҮРГЭЛЖ y.
tsegleg: tuple[int, int] = (10, 20)
# Tuple — RGB өнгө. Улаан, ногоон, цэнхэр — ҮРГЭЛЖ гурав.
ungu: tuple[int, int, int] = (255, 128, 0)
# Tuple — өдөр, сар, жил
ognoo: tuple[int, int, int] = (13, 7, 2026)
# Tuple — хүний бүртгэл: нэр, нас, хот
hun: tuple[str, int, str] = ("Болд", 25, "Улаанбаатар")Эдгээрийг list болгож бичиж БОЛНО, гэхдээ ЁСГҮЙ. Яагаад?
Координатыг [10, 20] гэж бичвэл — та .append(30) хийж чадна. Гэвч гурван хэмжээст координат гэж юу вэ? Хоёр хэмжээст цэг нь ҮРГЭЛЖ хоёр тоотой. Гурав дахийг нэмэх нь алдаа, гэтэл list түүнийг зөвшөөрнө. Tuple зөвшөөрөхгүй.
RGB өнгө нь ҮРГЭЛЖ гурван бүрэлдэхүүнтэй. .pop() хийвэл юу болох вэ? Ямар ч утгагүй. Tuple нь тэр алдааг боломжгүй болгоно.
Мөн type hint нь энэ ялгааг тод харуулж байна гэдгийг анзаараарай. Бүлэг 4-т хэлсэнчлэн:
python
neres: list[str] # хэдэн ч string
hun: tuple[str, int, str] # ЯГ ГУРВАН зүйл, ЯГ энэ дарааллаарlist[str] нь "string-үүдийн жагсаалт, хэдэн ч байж болно" гэсэн үг. tuple[str, int, str] нь "яг гурван элемент: эхнийх нь string, хоёр дахь нь тоо, гурав дахь нь string" гэсэн үг. Hint нь өөрөө бүтцийг тайлбарлаж байна.
Хэрэв tuple нь урт хувьсамтгай, нэг төрлийн бол ... (гурван цэг) ашиглана:
python
tootsuud: tuple[int, ...] = (1, 2, 3, 4, 5)tuple[int, ...] — "тоонуудын tuple, хэдэн ч байж болно." Энэ нь ховор боловч *args -ийн hint болж хэрэглэгддэг.
Бүлэг 2, Хичээл 5-ийн unpacking одоо бүрэн тодорхой болно.
python
hun: tuple[str, int, str] = ("Болд", 25, "Улаанбаатар")
ner, nas, hot = hun
print(ner)
print(nas)
print(hot)Болд
25
УлаанбаатарTuple нь ТОГТМОЛ бүтэцтэй тул unpacking нь маш байгалийн. Та эхний элемент нь нэр гэдгийг мэдэж байгаа тул түүнд ner гэсэн нэр өгч чадна.
Одоо zip ба enumerate -ийн нууц бүрэн тайлагдана:
python
neres = ["Болд", "Сараа"]
onoo = [85, 92]
hosud = list(zip(neres, onoo))
print(hosud)[('Болд', 85), ('Сараа', 92)]zip нь TUPLE-үүдийн жагсаалт үүсгэж байна. Хос бүр нь tuple[str, int] — нэр ба оноо, тогтмол бүтэц. Тиймээс for ner, o in zip(...) гэсэн бичлэг ажилладаг: тэр нь tuple бүрийг unpack хийж байна.
Ижил зүйл enumerate дээр:
python
baraanuud = ["ном", "утас"]
print(list(enumerate(baraanuud)))[(0, 'ном'), (1, 'утас')]Дахин tuple-үүд: tuple[int, str] — дугаар ба элемент.
Мөн dict.items():
python
unes = {"ном": 15000, "утас": 800000}
print(list(unes.items()))[('ном', 15000), ('утас', 800000)]Дахин tuple-үүд: tuple[str, int] — key ба value.
Одоо энэ гурван зүйл яагаад НЭГ ижил бичлэгээр ажилладаг нь тодорхой боллоо. Тэд бүгд tuple өгдөг, tuple нь unpack хийгддэг.
Бүлэг 2-т бид ингэж бичсэн:
python
def statistik(tootsuud: list[int]) -> tuple[int, int, int]:
return min(tootsuud), max(tootsuud), sum(tootsuud)
onoo = [85, 92, 78, 65, 90]
bag, ikh, niilber = statistik(onoo)
print(f"Хамгийн бага: {bag}")
print(f"Хамгийн их: {ikh}")
print(f"Нийлбэр: {niilber}")Хамгийн бага: 65
Хамгийн их: 92
Нийлбэр: 410Одоо hint нь -> tuple[int, int, int] гэдгийг анзаараарай. Энэ нь бүх үнэнийг хэлж байна: "энэ функц ЯГ гурван бүхэл тоо буцаана."
return min(...), max(...), sum(...) гэсэн мөрөнд хаалт БАЙХГҮЙ. Гэвч Python нь таслалаар тусгаарлагдсан утгуудыг автоматаар tuple болгож савладаг. Тэгэхээр энэ мөр нь return (min(...), max(...), sum(...)) гэж бичсэнтэй яг ижил.
Энэ бол сонирхолтой баримт: tuple-ийг үүсгэдэг зүйл нь хаалт биш, ТАСЛАЛ юм.
python
a = 1, 2, 3
print(a)
print(type(a))(1, 2, 3)
<class 'tuple'>Хаалтгүйгээр ч tuple үүслээ. Хаалт нь зөвхөн ойлгомжтой болгож, эргэлзээг арилгадаг. Практикт хаалт бичих нь дээр, гэхдээ return a, b гэсэн бичлэгт хаалт орхигдох нь маш түгээмэл, тэр нь бүрэн зөв.
Одоо Python-ы жижиг ч гэсэн төөрөгдүүлдэг урхийг үзье.
python
a = (5)
print(type(a))<class 'int'>Гэнэтийн зүйл! Бид дугуй хаалт бичсэн ч tuple үүсээгүй, зүгээр л тоо гарлаа.
Учир нь дугуй хаалт нь Python-д ХОЁР үүрэгтэй. Тэр нь tuple үүсгэх, эсвэл зүгээр л илэрхийллийг бүлэглэх ((2 + 3) * 4 гэх мэт). (5) гэсэн бичлэгт таслал байхгүй тул Python түүнийг бүлэглэлт гэж үзсэн.
Нэг элементтэй tuple үүсгэхийн тулд таслал заавал бичнэ:
python
a = (5,)
print(type(a))
print(a)<class 'tuple'>
(5,)Тэр ганц таслал нь бүх ялгааг үүсгэж байна. Дахин батлагдлаа: tuple-ийг үүсгэдэг зүйл нь таслал.
Энэ урхи нь бодит алдаанд хүргэдэг:
python
def f(*args: int) -> None:
print(args)
f(5)(5,)*args нь үргэлж tuple, ганц элементтэй ч гэсэн. Хэвлэхэд тэр ганц таслал харагдана — эхлээд харахад хачирхалтай, гэхдээ одоо та түүнийг ойлгож байна.
Одоо хичээлийн гол асуултад хариулъя: өөрчилж болдоггүй байх нь юугаараа сайн юм бэ?
Шалтгаан 1: аюулгүй байдал.
python
def bolovsruulakh(tootsuud: list[int]) -> int:
tootsuud.sort() # анхны жагсаалтыг ӨӨРЧИЛЛӨӨ!
return tootsuud[0]
anhnii = [30, 10, 20]
ur_dun = bolovsruulakh(anhnii)
print(ur_dun)
print(anhnii)10
[10, 20, 30]Гэнэтийн зүйл: anhnii жагсаалт өөрчлөгдсөн байна. Функц нь түүнийг эрэмбэлж, ЧИМЭЭГҮЙ өөрчилсөн. Хэрэв та кодынхаа өөр газарт anhnii -ийн анхны дарааллыг ашиглах гэж байсан бол — тэр алга болжээ.
Tuple дээр энэ боломжгүй:
python
def bolovsruulakh(tootsuud: tuple[int, ...]) -> int:
tootsuud.sort()
return tootsuud[0]AttributeError: 'tuple' object has no attribute 'sort'Функц нь таны өгөгдлийг өөрчилж ЧАДАХГҮЙ. Тэр sorted(tootsuud) гэж ШИНЭ жагсаалт үүсгэх ёстой болно. Таны анхны tuple аюулгүй үлдэнэ.
Энэ бол жинхэнэ ашиг тус: та tuple-ийг хэн ч ямар ч функцэд дамжуулж болно, эргэж ирэхэд яг тэр хэвээрээ байна гэдгийг МЭДЭЖ байна. Итгэлцлийн баталгаа.
Шалтгаан 2: dictionary-ийн key болж чадна.
Энэ бол tuple-ийн хамгийн ХҮЧИРХЭГ, хамгийн бага мэдэгддэг чадвар.
Dictionary-ийн key нь immutable байх ЁСТОЙ. String болно (immutable), тоо болно (immutable). Гэхдээ list болохгүй:
python
kart: dict[list[int], str] = {}
kart[[10, 20]] = "эрдэнэс"Traceback (most recent call last):
File "main.py", line 2, in <module>
kart[[10, 20]] = "эрдэнэс"
TypeError: unhashable type: 'list'TypeError: unhashable type: 'list' гэдэг нь "list-ийг key болгож ашиглаж болохгүй" гэсэн үг. (unhashable гэдэг үгийн техникийн утгыг ойлгох шаардлагагүй — товчхондоо "өөрчлөгддөг зүйлийг key болгож болохгүй.")
Яагаад? Логик нь ойлгомжтой. Хэрэв key нь өөрчлөгдвөл dictionary тэр key-г ОЛОХОО БОЛИНО. Та [10, 20] гэсэн key-гээр утга хадгалаад, дараа нь тэр жагсаалтыг [10, 20, 30] болгож өөрчилвөл — dictionary тэнэг байдалд орно.
Гэхдээ tuple нь өөрчлөгддөггүй тул key болж ЧАДНА:
python
kart: dict[tuple[int, int], str] = {}
kart[(10, 20)] = "эрдэнэс"
kart[(5, 5)] = "гарц"
kart[(0, 0)] = "эхлэл"
print(kart[(10, 20)])
print(kart)эрдэнэс
{(10, 20): 'эрдэнэс', (5, 5): 'гарц', (0, 0): 'эхлэл'}Энэ бол маш хэрэгтэй хэв маяг. Хоёр хэмжээст газрын зураг, тоглоомын самбар, координатаар индексжүүлсэн ямар ч өгөгдөл — бүгд tuple key ашиглана.
Илүү бодит жишээ:
python
zardal: dict[tuple[str, str], int] = {
("2026-01", "хоол"): 450000,
("2026-01", "тээвэр"): 120000,
("2026-02", "хоол"): 480000,
}
print(zardal[("2026-01", "хоол")])450000Key нь "сар ба ангилал" гэсэн ХОСЛОЛ. Tuple-гүйгээр үүнийг илэрхийлэх нь хамаагүй хэцүү байх байсан.
Шалтгаан 3: зорилгыг илэрхийлдэг.
Хамгийн нарийн, гэхдээ хамгийн чухал шалтгаан. Хэрэв та кодод tuple харвал, тэр нь танд ямар нэг зүйл ХЭЛЖ байна: "энэ өгөгдөл өөрчлөгдөхгүй. Түүний бүтэц тогтмол. Түүнийг нэмэх, хасах гэж бүү бод."
Тэр мессеж нь баримт бичиг юм. Уншигч нь кодыг ойлгоход тусална.
Практик шийдвэрийн дүрэм:
Tuple сонго:
Бүтэц нь ТОГТМОЛ (координат, RGB, огноо, бүртгэл)
Элемент бүр өөрийн УТГАТАЙ (эхнийх нь нэр, хоёр дахь нь нас)
Өгөгдөл өөрчлөгдөх ЁСГҮЙ
Dictionary-ийн key болгох хэрэгтэй
Функцээс олон утга буцаах
List сонго:
НЭГ ТӨРЛИЙН олон зүйл (нэрс, тоонууд, бараанууд)
Урт нь өөрчлөгдөж болно (нэмэх, хасах)
Эрэмбэлэх, шүүх, өөрчлөх шаардлагатай
Эргэлзвэл: list ашигла. Tuple нь тодорхой шалтгаантай үед л сонгогддог. Гэхдээ тэр шалтгаан гарч ирвэл — тэр нь маш тодорхой байдаг.
Хэрэв сонирхвол: tuple-ийг өөрчлөх гэж оролдоод TypeError: 'tuple' object does not support item assignment алдааг өөрийн нүдээр хараарай. Дараа нь .append() оролдоод AttributeError -ыг хараарай. Хоёр алдаа хоёулаа "энэ хайрцаг битүүмжилсэн" гэж хэлж байна.
Мөн хүсвэл: жижиг координат-key dictionary үүсгээд ажиллуулж үзээрэй.
python
samvar: dict[tuple[int, int], str] = {}
samvar[(0, 0)] = "X"
samvar[(1, 1)] = "O"
for baiirlal, temdeg in samvar.items():
x, y = baiirlal
print(f"({x}, {y}) дээр {temdeg} байна")x, y = baiirlal гэсэн мөр нь tuple-key -г unpack хийж байна — энэ хичээлийн бүх санаа нэг мөрөнд.
1. Tuple-ийг өөрчлөх гэж оролдох
TypeError: 'tuple' object does not support item assignmentTuple нь immutable. Хэрэв танд өөрчлөх шаардлагатай бол — та буруу бүтэц сонгосон байна, list ашигла. Эсвэл ШИНЭ tuple үүсгэ:
python
tsegleg = (10, 20)
shine_tsegleg = (99, tsegleg[1]) # шинэ tuple үүсгэв2. Нэг элементтэй tuple-д таслал мартах
python
a = (5) # энэ бол tuple БИШ, зүгээр л тоо
a = (5,) # энэ бол tupleАлдаа гарахгүй, гэхдээ дараа нь a[0] гэж хандахад:
TypeError: 'int' object is not subscriptable'int' object is not subscriptable гэдэг нь "тоонд index-ээр хандаж болохгүй" гэсэн үг. Таслал мартсанаас болсон.
3. List-ийг dictionary-ийн key болгох
TypeError: unhashable type: 'list'List нь өөрчлөгддөг тул key болж чадахгүй. Tuple болгож хувирга: kart[tuple(jagsaalt)] = utga.
4. Tuple доторх LIST нь өөрчлөгдөж чадна (нарийн урхи)
python
nariin: tuple[list[int], list[int]] = ([1, 2], [3, 4])
nariin[0].append(99)
print(nariin)([1, 2, 99], [3, 4])Гэнэтийн зүйл! Tuple нь өөрчлөгдсөн мэт харагдаж байна.
Гэвч үнэндээ tuple нь өөрчлөгдөөгүй. Tuple нь ХОЁР ЖАГСААЛТЫГ агуулж байна, тэдгээр нь яг тэр хэвээрээ. Гэхдээ жагсаалтуудын ДОТОР ТАЛ нь өөрчлөгдсөн.
Зүйрлэлээр: битүүмжилсэн хайрцаг дотор хоёр НЭЭЛТТЭЙ хайрцаг байна. Гадна хайрцгийг өөрчилж чадахгүй (өөр хайрцаг оруулж чадахгүй), гэхдээ дотор хайрцгуудыг нээж, дотор нь юм нэмж чадна.
Тиймээс дүрэм нь нарийвчлагдана: tuple нь өөрийн БҮТЦИЙГ хамгаална, гэхдээ доторх mutable объектуудыг хамгаалахгүй. Практикт tuple дотор list хийх нь ховор бөгөөд ихэвчлэн буруу дизайны шинж юм.
5. Tuple-ийг эрэмбэлэх гэж оролдох
python
tootsuud = (30, 10, 20)
tootsuud.sort()AttributeError: 'tuple' object has no attribute 'sort'.sort() нь ӨӨРЧЛӨДӨГ method тул tuple-д байхгүй. Оронд нь sorted() ашигла — тэр нь ШИНЭ жагсаалт буцаадаг:
python
tootsuud = (30, 10, 20)
erembelsen = sorted(tootsuud)
print(erembelsen)
print(tootsuud)[10, 20, 30]
(30, 10, 20)Анзаараарай: sorted нь LIST буцаасан (дөрвөлжин хаалт), tuple биш. Анхны tuple хэвээрээ. Хэрэв танд tuple хэрэгтэй бол tuple(sorted(tootsuud)) гэж дахин хөрвүүл.
Tuple нь list-тэй маш төстэй: index, len(), loop, slicing бүгд ажиллана. Гэхдээ өөрчлөгдөшгүй (immutable).
Дугуй хаалт нь tuple-ийн шинж, гэхдээ түүнийг үүсгэдэг зүйл нь үнэндээ ТАСЛАЛ. Нэг элементтэй tuple: (5,) — таслал заавал.
Өөрчлөх оролдлого → TypeError: 'tuple' object does not support item assignment.
append, remove, sort зэрэг method БАЙХГҮЙ. Зөвхөн count() ба index().
List бол НЭГ ТӨРЛИЙН ОЛОН зүйл (нэрс). Tuple бол ӨӨР ТӨРЛИЙН ЦӨӨН зүйл, тогтмол бүтэцтэй (нэр, нас, хот).
Hint нь ялгааг харуулна: list[str] (хэдэн ч) vs tuple[str, int, str] (яг гурав, яг энэ дараалал).
zip, enumerate, dict.items() — бүгд TUPLE өгдөг. Тиймээс for a, b in ... гэсэн unpacking ажилладаг.
Функц олон утга буцаахад Python нь автоматаар tuple савладаг: -> tuple[int, int, int].
Immutable-ийн ГУРВАН давуу тал: (1) функц таны өгөгдлийг чимээгүй өөрчилж чадахгүй; (2) dictionary-ийн key болж чадна (list чадахгүй — TypeError: unhashable type: 'list'); (3) кодыг уншиж байгаа хүнд "энэ өөрчлөгдөхгүй" гэж хэлдэг.
Эргэлзвэл list ашигла. Tuple нь тодорхой шалтгаантай үед л сонгогдоно.
Дараагийн хичээлд бид set -ийг үзнэ. Тэр нь энэ курсэд аль хэдийн хоёр удаа гарч ирсэн: Бүлэг 2-ын set comprehension, Түвшин 1-ийн guided build-ийн len(set(ugs)). Set нь давхардлыг автоматаар устгадаг, эрэмбэ хадгалдаггүй, мөн in шалгалтыг list-ээс ХАМААГҮЙ хурдан гүйцэтгэдэг. Тэр сүүлчийн шинж чанар нь эхэндээ жижиг мэт санагдана, гэхдээ том өгөгдөл дээр ажиллахад бүх ялгааг үүсгэдэг.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.