Лекция · 4.1

Python: Тізімдер

Сыныпта 30 оқушының бағасын сақтау керек делік. 8-сыныптағы біліммен не істейсің? baga1, baga2, baga3... baga30 — отыз айнымалы жасайсың ба?! Ал орташасын есептеу үшін отызын да қолмен қосасың ба? Азап! Программалаудың жауабы — ТІЗІМ: отыз баға БІР атаумен сақталады, ал циклмен өңдеу үш-ақ жол. Бұл сабақтан бастап Python-ның ең қуатты құрылымдарының бірін меңгереміз — 9-сыныптың бүкіл программалау бөлімі осыған құрылады.

Тізім деген не
Анықтама
Тізім (list) — бір атаумен сақталатын, РЕТТЕЛГЕН мәндер жиынтығы. Әр мәні — элемент деп аталады.
bagalar = [5, 4, 5, 3, 5]
esimder = ['Аружан', 'Дәулет', 'Мадина']
aralas  = ['Али', 9, 4.5, True]
bos     = []

Тізім тік жақшамен [] жасалады, элементтер үтірмен бөлінеді. Python тізімі әртүрлі типтегі мәндерді (сан, жол, логикалық мән) бірге сақтай алады. Бос тізім де жарамды — оны кейін толтыруға болады.

🚃
Аналогия: тізім — пойыз: вагондары (элементтері) ретімен тіркелген, әр вагонның нөмірі (индексі) бар, пойыз атауы (айнымалы) — біреу. Вагонды ауыстыруға, қосуға, алып тастауға болады — пойыз сол пойыз.
Индекс
Анықтама
Индекс — элементтің тізімдегі реттік нөмірі. Python-да индекстеу НӨЛДЕН басталады: бірінші элемент — [0], екінші — [1]...
sandar = [10, 20, 30, 40, 50]
print(sandar[0])   # 10 — бірінші
print(sandar[2])   # 30 — үшінші
print(sandar[-1])  # 50 — соңғы
print(sandar[-2])  # 40 — соңынан екінші

ТЕРІС индекс соңынан санайды: [-1] — соңғы, [-2] — соңынан екінші. Бұл соңғы элементке len-сіз қол жеткізудің ыңғайлы жолы.

Элемент1020304050
Индекс01234
Теріс индекс−5−4−3−2−1
⚠️
Ең жиі қате: «бірінші элемент — [1]» деп ойлау! [1] — ЕКІНШІ элемент. Тағы бір қате: жоқ индекске қатынау — 5 элементті тізімде sandar[5] жазсаң, программа IndexError қатесімен құлайды (соңғы индекс — 4).
Элементті өзгерту және len()

Тізім — ӨЗГЕРМЕЛІ құрылым: кез келген элементті индексі арқылы жаңа мәнмен алмастыруға болады.

bagalar = [5, 4, 5, 3, 5]
bagalar[3] = 4          # 3-индекстегі 3-ті 4-ке ауыстырдық
print(bagalar)          # [5, 4, 5, 4, 5]
print(len(bagalar))     # 5 — элементтер саны
Анықтама
len(тізім) — тізімдегі элементтер санын қайтаратын функция. Соңғы элементтің индексі әрқашан len(тізім) - 1.
Кесінді (срез)
Анықтама
Кесінді — тізімнің бөлігін алу: тізім[басы:соңы]. «Басы» индексі КІРЕДІ, «соңы» индексі КІРМЕЙДІ.
a = [1, 2, 3, 4, 5, 6]
print(a[1:4])   # [2, 3, 4] — 1-ден 4-ке дейін
print(a[:3])    # [1, 2, 3] — басынан үшеу
print(a[3:])    # [4, 5, 6] — 3-тен соңына дейін
🍞
Есте сақтау: a[1:4] кесіндісінде элементтер саны = 4 − 1 = 3. «Соңы минус басы» — кесінді ұзындығы. Соңғы индекс ешқашан кірмейді — бөлке нанның «4-ші тілімге ДЕЙІН кес» дегені сияқты.
Тізімді аралау (цикл)

Тізімнің күші 8-сыныптағы циклдармен қосылғанда ашылады. Аралаудың екі жолы:

# 1-тәсіл: элементтер бойынша
bagalar = [5, 4, 5, 3, 5]
for b in bagalar:
    print(b)

# 2-тәсіл: индекстер бойынша
for i in range(len(bagalar)):
    print(i, bagalar[i])

Қашан қайсысы? Элементтерді тек ОҚУ керек болса — 1-тәсіл (қысқа, түсінікті). Элементтерді ӨЗГЕРТУ немесе индексі керек болса — 2-тәсіл: bagalar[i] = bagalar[i] + 1.

Есеп: тізімдегі барлық бағаны экранға нөмірімен шығару.
bagalar = [5, 4, 3]
for i in range(len(bagalar)):
    print(i + 1, '-оқушы:', bagalar[i])
Жауабы: «1 -оқушы: 5», «2 -оқушы: 4», «3 -оқушы: 3».
Анықтама
Тізім генераторы — толтырылған тізімді бір жолмен құру тәсілі: [өрнек for айнымалы in дереккөз]. Классикалық цикл жазудан гөрі қысқа әрі тиімді.
Классикалық тәсілГенератор тәсілі
s = []
for i in range(1,10):
  s.append(i)
s = [i for i in range(1,10)]

Екеуінің нәтижесі бірдей: [1, 2, 3, 4, 5, 6, 7, 8, 9]. Генераторды массивтегі мәндерді өзгертіп жаңа тізім жасауда да қолдануға болады: a = [5, -5, 2, -2] үшін b = [i**3 for i in a] — әр элементтің кубынан тұратын жаңа тізім: [125, -125, 8, -8].

🎯 ҰБТ байланысы
Тізімдер — ҰБТ-ның Python блогындағы міндетті тақырып.
1
Индекстеу 0-ден: a[1] — ЕКІНШІ элемент, a[-1] — соңғы.
2
Кесінді ережесі: a[1:4] — соңғы индекс кірмейді.
3
len() пен соңғы индекс байланысы: соңғысы len−1.
4
Код бойынша тізімнің соңғы күйін анықтау (элемент өзгертілгеннен кейін).
Сабақ қорытындысы
  • Тізім — бір атаумен сақталатын реттелген мәндер: a = [10, 20, 30].
  • Индекс 0-ден басталады; теріс индекс соңынан санайды (a[-1] — соңғы).
  • len(a) — элементтер саны; соңғы индекс — len(a)−1; жоқ индекс — IndexError.
  • Кесінді a[басы:соңы] — соңғы индекс кірмейді.
  • Аралау: for x in a (оқу) немесе for i in range(len(a)) (өзгерту).