Asosiy qismga o'tish

Ro'yxatlar (list)

9-bob 43 kod bloki 3141 so'z

Bu bobda

  • bir nechta qiymatni bitta o'zgaruvchida saqlashni
  • elementni olish, o'zgartirish, qo'shish va o'chirishni
  • sort() va sorted() farqini va harflar tartibi tuzog'ini
  • ro'yxatdan nusxa olishning to'g'ri yo'lini
  • split() va join() bilan matn ↔ ro'yxat

Nega ro'yxat kerak?

Guruhda 25 ta talaba bo'lsa, 25 ta o'zgaruvchi (talaba1, talaba2, ...) ochmaymiz. Ro'yxat (list) — qiymatlarning tartiblangan to'plami. U kvadrat qavs ichida, vergul bilan yoziladi:

python4 qator
mevalar = ["olma", "anor", "behi", "tarvuz"]
print(mevalar)
print(type(mevalar))
print(len(mevalar))
Natija
['olma', 'anor', 'behi', 'tarvuz']
<class 'list'>
4

Ro'yxatda istalgan turdagi qiymat bo'lishi mumkin, hatto aralash:

python4 qator
baholar = [5, 4, 5, 3]
aralash = ["Ali", 20, 1.75, True]
bosh = []
print(baholar, aralash, bosh)
Natija
[5, 4, 5, 3] ['Ali', 20, 1.75, True] []

list() boshqa narsadan ro'yxat yasaydi:

python2 qator
print(list(range(1, 6)))
print(list("salom"))
Natija
[1, 2, 3, 4, 5]
['s', 'a', 'l', 'o', 'm']

Indeks: satrdagi kabi

Indekslash va kesish 5-bobdagi satrlar bilan aynan bir xil:

python5 qator
studentlar = ["Abulqosim", "Sarvinoz", "Otabek", "Javohir", "Behruz"]
print(studentlar[0])
print(studentlar[-1])
print(studentlar[1:3])
print(studentlar[::-1])
Natija
Abulqosim
Behruz
['Sarvinoz', 'Otabek']
['Behruz', 'Javohir', 'Otabek', 'Sarvinoz', 'Abulqosim']
python2 qator
studentlar = ["Abulqosim", "Sarvinoz", "Otabek"]
print(studentlar[3])
Xato xabari
IndexError: list index out of range

Ro'yxat elementi ham satr bo'lsa, unga satr metodlarini qo'llash mumkin:

python2 qator
studentlar = ["abulqosim", "sarvinoz", "otabek"]
print(f"Mening do'stim {studentlar[2].capitalize()}")
Natija
Mening do'stim Otabek

Ro'yxat o'zgaradi

Satrdan asosiy farqi: ro'yxat o'zgaruvchan (mutable). Elementni joyida almashtirish mumkin:

python3 qator
mevalar = ["olma", "anor", "behi"]
mevalar[0] = "tarvuz"
print(mevalar)
Natija
['tarvuz', 'anor', 'behi']

Qo'shish

python7 qator
mevalar = ["olma", "anor"]
mevalar.append("behi")
print(mevalar)
mevalar.insert(0, "uzum")
print(mevalar)
mevalar.extend(["nok", "olcha"])
print(mevalar)
Natija
['olma', 'anor', 'behi']
['uzum', 'olma', 'anor', 'behi']
['uzum', 'olma', 'anor', 'behi', 'nok', 'olcha']
Metod Nima qiladi
append(x) oxiriga bitta element qo'shadi
insert(i, x) i o'ringa qo'shadi, qolganlari suriladi
extend(ro'yxat) boshqa ro'yxatning hamma elementlarini oxiriga qo'shadi

append ga ro'yxat berish

python6 qator
a = [1, 2]
a.append([3, 4])
print(a, len(a))
b = [1, 2]
b.extend([3, 4])
print(b, len(b))
Natija
[1, 2, [3, 4]] 3
[1, 2, 3, 4] 4

append ro'yxatni bitta element sifatida qo'shdi: ichida ro'yxat paydo bo'ldi. Elementlarini qo'shish uchun extend.

O'chirish

python9 qator
studentlar = ["Abulqosim", "Sarvinoz", "Otabek", "Javohir", "Behruz"]
oxirgisi = studentlar.pop()
print("pop():", oxirgisi, studentlar)
ikkinchisi = studentlar.pop(1)
print("pop(1):", ikkinchisi, studentlar)
studentlar.remove("Otabek")
print("remove:", studentlar)
del studentlar[0]
print("del:", studentlar)
Natija
pop(): Behruz ['Abulqosim', 'Sarvinoz', 'Otabek', 'Javohir']
pop(1): Sarvinoz ['Abulqosim', 'Otabek', 'Javohir']
remove: ['Abulqosim', 'Javohir']
del: ['Javohir']
Usul Nimani o'chiradi Qaytaradimi?
pop() oxirgisini ha, o'chirilgan elementni
pop(i) i indeksdagini ha
remove(x) qiymati x bo'lgan birinchi elementni yo'q
del a[i] i indeksdagini yo'q
clear() hammasini yo'q

Yo'q elementni remove qilish

python2 qator
mevalar = ["olma", "anor"]
mevalar.remove("banan")
Xato xabari
ValueError: list.remove(x): x not in list

Avval tekshiring: if "banan" in mevalar: mevalar.remove("banan").

Bir xil qiymatning hammasini o'chirish uchun while va in:

python4 qator
hayvonlar = ["it", "mushuk", "sichqon", "baliq", "quyon", "mushuk"]
while "mushuk" in hayvonlar:
    hayvonlar.remove("mushuk")
print(hayvonlar)
Natija
['it', 'sichqon', 'baliq', 'quyon']

Qidirish

python4 qator
baholar = [5, 4, 5, 3, 5, 4]
print(5 in baholar)
print(baholar.count(5))
print(baholar.index(3))
Natija
True
3
3

index(x) — x ning birinchi indeksi. x bo'lmasa, ValueError beradi — avval in bilan tekshiring.

Tartiblash: sort() va sorted()

python5 qator
sonlar = [42, 7, 19, 3, 25]
sonlar.sort()
print(sonlar)
sonlar.sort(reverse=True)
print(sonlar)
Natija
[3, 7, 19, 25, 42]
[42, 25, 19, 7, 3]

sort() ro'yxatning o'zini o'zgartiradi. Asl ro'yxat kerak bo'lsa, sorted() — u yangi ro'yxat qaytaradi:

python4 qator
sonlar = [42, 7, 19, 3, 25]
tartiblangan = sorted(sonlar)
print("yangi:", tartiblangan)
print("asl:  ", sonlar)
Natija
yangi: [3, 7, 19, 25, 42]
asl:   [42, 7, 19, 3, 25]

sort() natijasini o'zgaruvchiga olish

python4 qator
sonlar = [3, 1, 2]
natija = sonlar.sort()
print(natija)
print(sonlar)
Natija
None
[1, 2, 3]

sort() hech narsa qaytarmaydi (None), u ro'yxatni joyida tartiblaydi. Yangi ro'yxat kerak bo'lsa — sorted(sonlar).

Katta harflar oldinda turadi

python3 qator
mashinalar = ["bmw", "mercedes", "toyota", "bugatti", "Spark"]
print(sorted(mashinalar))
print(sorted(mashinalar, key=str.lower))
Natija
['Spark', 'bmw', 'bugatti', 'mercedes', 'toyota']
['bmw', 'bugatti', 'mercedes', 'Spark', 'toyota']

Kompyuter uchun hamma katta harflar kichik harflardan oldin keladi ("S" < "b"). Shuning uchun Spark birinchi chiqdi. Harf kattaligiga qaramay tartiblash uchun key=str.lower: tartiblashda har bir so'z kichik harfga o'girib solishtiriladi, lekin natijada asl ko'rinishida qoladi.

reverse() — tartiblamaydi, faqat teskari aylantiradi:

python3 qator
mashinalar = ["bmw", "mercedes", "toyota"]
mashinalar.reverse()
print(mashinalar)
Natija
['toyota', 'mercedes', 'bmw']

for bilan ro'yxat bo'ylab

7-bobdagi for endi o'zining asosiy vazifasida:

python3 qator
mashinalar = ["bmw", "mercedes", "toyota", "bugatti", "spark"]
for mashina in mashinalar:
    print(mashina.capitalize())
Natija
Bmw
Mercedes
Toyota
Bugatti
Spark

Ro'yxatdan yangi ro'yxat yasash — juda ko'p uchraydigan andoza:

python5 qator
hayvonlar = ["Lion", "Tiger", "Elephant", "Zebra", "Panda"]
kichik = []
for h in hayvonlar:
    kichik.append(h.lower())
print(kichik)
Natija
['lion', 'tiger', 'elephant', 'zebra', 'panda']

Filtrlash — faqat shartga mos elementlarni olish:

python7 qator
ballar = [45, 88, 72, 30, 95, 61]
otganlar = []
for b in ballar:
    if b >= 60:
        otganlar.append(b)
print(otganlar)
print(f"{len(otganlar)} / {len(ballar)} talaba o'tdi")
Natija
[88, 72, 95, 61]
4 / 6 talaba o'tdi

sum, min, max, len ro'yxat bilan ishlaydi:

python4 qator
ballar = [45, 88, 72, 30, 95, 61]
print("Yig'indi:", sum(ballar))
print("O'rtacha:", round(sum(ballar) / len(ballar), 1))
print("Eng yuqori:", max(ballar), " eng past:", min(ballar))
Natija
Yig'indi: 391
O'rtacha: 65.2
Eng yuqori: 95  eng past: 30

Indeks ham kerak bo'lsa — range(len(...)):

python6 qator
ballar = [45, 88, 72, 30, 95, 61]
eng_i = 0
for i in range(len(ballar)):
    if ballar[i] > ballar[eng_i]:
        eng_i = i
print(f"Eng yuqori ball {ballar[eng_i]}, indeksi {eng_i}")
Natija
Eng yuqori ball 95, indeksi 4

10-bobda buni enumerate() bilan chiroyliroq yozamiz.

Nusxa olish tuzog'i

python5 qator
a = [1, 2, 3]
b = a
b.append(4)
print("a:", a)
print("b:", b)
Natija
a: [1, 2, 3, 4]
b: [1, 2, 3, 4]

a ni o'zgartirmagan edik, lekin u ham o'zgardi! 1-bobni eslang: o'zgaruvchi — yorliq. b = a yangi ro'yxat yasamaydi, xuddi shu ro'yxatga ikkinchi yorliq yopishtiradi. Haqiqiy nusxa uchun copy() yoki [:]:

python5 qator
a = [1, 2, 3]
b = a.copy()
b.append(4)
print("a:", a)
print("b:", b)
Natija
a: [1, 2, 3]
b: [1, 2, 3, 4]

split() va join(): matn ↔ ro'yxat

split() matnni so'zlarga ajratib, ro'yxat qaytaradi:

python5 qator
gap = "Men Python o'rganyapman"
sozlar = gap.split()
print(sozlar)
print(len(sozlar), "ta so'z")
print("12,45,7".split(","))
Natija
['Men', 'Python', "o'rganyapman"]
3 ta so'z
['12', '45', '7']

join() — teskarisi: ro'yxatni bitta matnga yopishtiradi. Ajratuvchi oldida yoziladi:

python3 qator
sozlar = ["Toshkent", "Samarqand", "Buxoro"]
print(", ".join(sozlar))
print(" -> ".join(sozlar))
Natija
Toshkent, Samarqand, Buxoro
Toshkent -> Samarqand -> Buxoro

5-bobdagi title() muammosining yechimi

O'zbekcha ismlarda title() apostrofdan keyin ham katta harf qo'yardi. Endi har bir so'zni alohida capitalize() qilamiz:

python6 qator
ism = "o'tkir g'ulomov"
print(ism.title())
qismlar = []
for soz in ism.split():
    qismlar.append(soz.capitalize())
print(" ".join(qismlar))
Natija
O'Tkir G'Ulomov
O'tkir G'ulomov

Bir qatordan bir nechta son o'qish

Endi foydalanuvchi sonlarni bitta qatorda, probel bilan kirita oladi:

python6 qator
qator = input("Sonlarni probel bilan kiriting: ")
sonlar = []
for s in qator.split():
    sonlar.append(int(s))
print(sonlar)
print("Yig'indi:", sum(sonlar))
Natija
Sonlarni probel bilan kiriting: 5 12 7 20 3
[5, 12, 7, 20, 3]
Yig'indi: 47

split() matnlar ro'yxatini beradi (['5', '12', ...]), shuning uchun har birini int() qilamiz. 12-bobda buni bitta qatorda yozishni o'rganamiz.

Ro'yxat ichida ro'yxat

Jadvalni ro'yxatlar ro'yxati bilan ifodalash mumkin:

python9 qator
jurnal = [
    ["Ali", 5, 4, 5],
    ["Vali", 3, 4, 4],
    ["Sarvinoz", 5, 5, 5],
]
for qator in jurnal:
    ism = qator[0]
    baholar = qator[1:]
    print(f"{ism:<10} o'rtacha {sum(baholar) / len(baholar):.2f}")
Natija
Ali        o'rtacha 4.67
Vali       o'rtacha 3.67
Sarvinoz   o'rtacha 5.00

jurnal[2][0] — 2-qatorning 0-elementi, ya'ni "Sarvinoz".

Kitoblarda

  • Python asoslari: List (ro'yxat) 30–37-betlar.
  • Python Crash Course: 3-bob Introducing Lists 33–47-betlar (append, insert, del, pop, remove, sort, sorted, reverse, len); 4-bob Working with Lists 49–69-betlar (for, range, min/max/sum, kesish, nusxa olish).

Xulosa

  • [a, b, c] — ro'yxat; indeks va kesish satrdagidek.
  • append — bitta, extend — ko'p, insert(i, x) — o'rtaga.
  • pop qaytaradi, remove qiymat bo'yicha, del indeks bo'yicha o'chiradi.
  • sort() joyida va None qaytaradi; sorted() yangi ro'yxat beradi; key=str.lower — harf kattaligiga qaramay.
  • b = a nusxa emas! a.copy() yoki a[:].
  • split() matn → ro'yxat, "sep".join() ro'yxat → matn.

Mashqlar

Ro'yxatni bitta qatorda probel bilan kiritiladi deb oling: sonlar = [], keyin for s in input().split(): sonlar.append(int(s)). Natijani probel bilan yoki ro'yxat ko'rinishida chiqarishingiz mumkin.

Array1

Butun son N berilgan (N > 0). Dastlabki N ta musbat toq sondan ro'yxat tuzing va chiqaring: 1, 3, 5, ...

KirishKutilgan natija
51 3 5 7 9
11
31 3 5
Yechimni ko'rish
python5 qator
n = int(input())
r = []
for i in range(n):
    r.append(2 * i + 1)
print(r)
Array2

Butun son N berilgan (N > 0). 2 ning dastlabki N ta darajasidan ro'yxat tuzing: 2, 4, 8, 16, ...

KirishKutilgan natija
52 4 8 16 32
12
102 4 8 16 32 64 128 256 512 1024
Yechimni ko'rish
python5 qator
n = int(input())
r = []
for i in range(1, n + 1):
    r.append(2 ** i)
print(r)
Array4

N (N > 1), A va D berilgan. Birinchi hadi A, ayirmasi D bo'lgan arifmetik progressiyaning dastlabki N ta hadidan ro'yxat tuzing: A, A + D, A + 2D, ...

KirishKutilgan natija
5, 1, 31 4 7 10 13
3, 10, -510 5 0
4, 0, 00 0 0 0
Yechimni ko'rish
python7 qator
n = int(input())
a = int(input())
d = int(input())
r = []
for i in range(n):
    r.append(a + i * d)
print(r)
Array5

N (N > 1), A va D berilgan. Birinchi hadi A, maxraji D bo'lgan geometrik progressiyaning dastlabki N ta hadidan ro'yxat tuzing: A, A·D, A·D², ...

KirishKutilgan natija
5, 1, 21 2 4 8 16
4, 3, -13 -3 3 -3
3, 5, 105 50 500
Yechimni ko'rish
python7 qator
n = int(input())
a = int(input())
d = int(input())
r = [a]
for _ in range(n - 1):
    r.append(r[-1] * d)
print(r)
Array7

Sonlar ro'yxati berilgan (bitta qatorda). Elementlarini teskari tartibda chiqaring.

KirishKutilgan natija
1 2 3 4 55 4 3 2 1
77
10 -3 88 -3 10
Yechimni ko'rish
python4 qator
r = []
for s in input().split():
    r.append(int(s))
print(r[::-1])
Array8

Butun sonlar ro'yxati berilgan. Undagi barcha toq sonlarni tartibi bo'yicha chiqaring, oxirida esa ularning sonini chiqaring.

KirishKutilgan natija
1 2 3 4 51 3 5 3
2 4 60
7 -3 8 97 -3 9 3
Yechimni ko'rish
python8 qator
r = []
for s in input().split():
    r.append(int(s))
toq = []
for x in r:
    if x % 2 != 0:
        toq.append(x)
print(toq, len(toq))
Array9

Butun sonlar ro'yxati berilgan. Undagi barcha juft sonlarni teskari tartibda chiqaring, oxirida esa ularning sonini chiqaring.

KirishKutilgan natija
1 2 3 4 5 66 4 2 3
1 3 50
8 -2 7 00 -2 8 3
Yechimni ko'rish
python8 qator
r = []
for s in input().split():
    r.append(int(s))
juft = []
for x in r:
    if x % 2 == 0:
        juft.append(x)
print(juft[::-1], len(juft))
9.1

Ballar ro'yxati berilgan. Eng yuqori ballni va uning indeksini chiqaring (bir nechta bo'lsa — birinchisi).

KirishKutilgan natija
45 88 72 95 6195 3
10 10 510 0
77 0
Yechimni ko'rish
python4 qator
r = []
for s in input().split():
    r.append(int(s))
print(max(r), r.index(max(r)))
9.2

Ballar ro'yxati berilgan. O'rtacha balldan yuqori ball olganlar sonini chiqaring.

KirishKutilgan natija
40 60 801
50 50 500
10 20 30 1001
Yechimni ko'rish
python9 qator
r = []
for s in input().split():
    r.append(int(s))
ort = sum(r) / len(r)
k = 0
for x in r:
    if x > ort:
        k += 1
print(k)
9.3

Sonlar ro'yxati berilgan. Takrorlanganlarini olib tashlang, birinchi uchragan tartibini saqlab chiqaring.

KirishKutilgan natija
3 1 3 2 1 53 1 2 5
7 7 77
1 2 31 2 3
Yechimni ko'rish
python5 qator
r = []
for s in input().split():
    if int(s) not in r:
        r.append(int(s))
print(r)
9.4

Ism-familiya (ikki yoki undan ortiq so'z) kichik harflar bilan berilgan. Har bir so'zni katta harf bilan boshlab chiqaring. O'zbekcha apostroflarga e'tibor bering: o'tkir → O'tkir.

KirishKutilgan natija
o'tkir g'ulomovO'tkir G'ulomov
abulqosim rafiqovAbulqosim Rafiqov
ali vali o'g'liAli Vali O'g'li
Yechimni ko'rish
python4 qator
q = []
for soz in input().split():
    q.append(soz.capitalize())
print(" ".join(q))
9.5

Sonlar ro'yxati berilgan (kamida ikkita har xil son bor). Ikkinchi eng katta har xil sonni chiqaring.

KirishKutilgan natija
5 9 3 9 77
1 21
4 4 8 44
Yechimni ko'rish
python6 qator
r = []
for s in input().split():
    if int(s) not in r:
        r.append(int(s))
r.sort()
print(r[-2])
9.6

Shaharlar nomlari bitta qatorda probel bilan berilgan. Ularni alifbo tartibida (harf kattaligiga qaramay) vergul va probel bilan ajratib chiqaring.

KirishKutilgan natija
toshkent Buxoro samarqand AndijonAndijon, Buxoro, samarqand, toshkent
b A cA, b, c
Yechimni ko'rish
python1 qator
print(", ".join(sorted(input().split(), key=str.lower)))

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar