Гузариш ба мундариҷа
Мавзӯи 9 аз 18

Рӯйхатҳо

Тағйирёбанда як қиматро нигоҳ медорад. Агар қиматҳо ҳазор бошанд-чӣ — баҳоҳои синф, нархҳои молҳо, ҳароратҳо дар як сол? Барои ин рӯйхатҳо ҳастанд — дар забонҳои дигар онҳоро массив меноманд.

Сохтани рӯйхат

Рӯйхат дар қавсҳои чоркунҷа, элементҳо бо вергул навишта мешаванд:

primes = [2, 3, 5, 7, 11]
names = ["Анис", "Бахтиёр", "Вафо"]
empty = []
print(primes)       # [2, 3, 5, 7, 11]
print(len(primes))  # 5

Индексҳо ва бурришҳо

Ҳама чиз мисли сатрҳо: индексҳо аз сифр, манфиҳо — аз охир, бурришҳои a[i:j]:

a = [10, 20, 30, 40, 50]
print(a[0])      # 10
print(a[-1])     # 50
print(a[1:3])    # [20, 30]
print(a[::-1])   # [50, 40, 30, 20, 10]

Фарқи асосӣ аз сатрҳо: рӯйхатҳоро тағйир додан мумкин аст:

a[0] = 99
print(a)         # [99, 20, 30, 40, 50]

Илова ва нест кардан

a = []
a.append(5)        # ба охир илова кардан → [5]
a.append(8)        # → [5, 8]
a.insert(0, 1)     # аз рӯи индекси 0 гузоштан → [1, 5, 8]
last = a.pop()     # охиринро гирифта, бармегардонад → last = 8, a = [1, 5]
a.remove(1)        # вохӯрии аввали қимати 1-ро нест кардан → [5]

append ва pop() аз охир фаврӣ кор мекунанд. insert(0, …) ва pop(0) ҳамаи элементҳоро ҷобаҷо мекунанд — дар рӯйхатҳои калон ин суст аст.

Гузаштан аз рӯйхат

prices = [120, 80, 250]
for p in prices:
    print(p * 2)

Агар индекс лозим бошад — for i in range(len(a)). Агар ҳардуяш лозим бошад — enumerate:

for i, p in enumerate(prices):
    print(i, p)

Функсияҳои фоиданок

a = [4, 1, 7, 1, 3]
print(sum(a))         # 16
print(min(a), max(a)) # 1 7
print(a.count(1))     # 2 — 1 чанд бор вомехӯрад
print(a.index(7))     # 2 — индекси вохӯрии аввали 7
print(3 in a)         # True

split ва map — муфассал

Дар мавзӯи вуруд мо сатри тайёри a, b = map(int, input().split())-ро истифода мебурдем. Акнун мебинем, ки дар дохили он чӣ ҳаст:

line = "5 12 -3"
parts = line.split()           # ['5', '12', '-3'] — рӯйхати сатрҳо
nums = list(map(int, parts))   # [5, 12, -3] — рӯйхати ададҳо
  • split() сатрро аз рӯи фосилаҳо мебурад ва рӯйхати сатрҳо бармегардонад. Бо аргумент аз рӯи ҷудокунандаи дигар мебурад: "a,b,c".split(",") → ['a', 'b', 'c'].
  • map(f, рӯйхат) функсияи f-ро ба ҳар элемент татбиқ мекунад.
  • list(...) натиҷаро ба рӯйхат ҷамъ мекунад.

Бинобар ин сатри n ададро, новобаста аз шумораашон, бо як сатри код мехонанд:

a = list(map(int, input().split()))

join — рӯйхат ба сатр

Амали баръакс — часпонидани рӯйхати сатрҳо ба як сатр бо ҷудокунанда:

words = ["сурх", "сабз", "кабуд"]
print(", ".join(words))     # сурх, сабз, кабуд

join танҳо бо сатрҳо кор мекунад. Барои бо фосила чоп кардани рӯйхати ададҳо аввал ададҳоро ба сатр табдил медиҳанд:

a = [3, 1, 4]
print(" ".join(map(str, a)))   # 3 1 4

Роҳи дигар — print(*a): ситорача рӯйхатро ба аргументҳои алоҳидаи print «паҳн мекунад».

Рӯйхат аз сифрҳо ва генераторҳо

zeros = [0] * 5                      # [0, 0, 0, 0, 0]
squares = [i * i for i in range(6)]  # [0, 1, 4, 9, 16, 25]
evens = [x for x in range(10) if x % 2 == 0]   # [0, 2, 4, 6, 8]

Навишти [ифода for x in ... if шарт]-ро генератори рӯйхат меноманд — ин роҳи кӯтоҳи сохтани рӯйхат бо давра аст.

Истинодҳо ва нусхаҳо

a = [1, 2, 3]
b = a          # b — ҳамон a аст
b[0] = 100
print(a)       # [100, 2, 3] — a ҳам тағйир ёфт!
c = a[:]       # нусха

Таъинкунӣ рӯйхатро нусха намекунад, балки ба он номи дуюм медиҳад. Нусха лозим бошад — бурриши a[:] ё a.copy()-ро истифода бар.

Мураттабсозӣ — дар мавзӯи навбатӣ

Рӯйхатҳо методи sort() доранд, вале дар бораи мураттабсозӣ ва ҷустуҷӯ алоҳида гап мезанем.

Хулоса

  • рӯйхат — [...], индексҳо ва бурришҳо мисли сатрҳо, вале элементҳоро тағйир додан мумкин аст;
  • append, pop, insert, remove рӯйхатро тағйир медиҳанд;
  • sum, min, max, count, index, in;
  • list(map(int, input().split())) — хондани сатри ададҳо;
  • " ".join(map(str, a)) ё print(*a) — чоп кардани рӯйхат;
  • b = a нусха намекунад, a[:] — нусха мекунад.