Рӯйхатҳо
Тағйирёбанда як қиматро нигоҳ медорад. Агар қиматҳо ҳазор бошанд-чӣ — баҳоҳои синф, нархҳои молҳо, ҳароратҳо дар як сол? Барои ин рӯйхатҳо ҳастанд — дар забонҳои дигар онҳоро массив меноманд.
Сохтани рӯйхат
Рӯйхат дар қавсҳои чоркунҷа, элементҳо бо вергул навишта мешаванд:
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[:]— нусха мекунад.