Isoqjanov Ilyos | Python
512 subscribers
34 photos
13 videos
2 files
60 links
🐍 Python bo'yicha o'zbek tilidagi sifatli materiallarni ko'paytirishda o'zing madadkor bo'lgin Allohim.

Shaxsiy blogim:
https://t.me/coldboot_blog

Admin:
@JurabekAbdusattarov,
@pythonwithcoldboot
Download Telegram
📌 Python: int (butun son) tipidagi o'zgaruvchilar haqida

🔢 int — bu Pythondagi butun sonli o'zgaruvchi turi. Keling, u bilan bog'liq foydali metod va funksiyalarni ko‘rib chiqamiz.

🔹 1. .bit_length()
Sonni yozish uchun kerak bo‘lgan bitlar sonini qaytaradi.


x = 37
print(x.bit_length()) # ➝ 6


🔹 2. .to_bytes(length, byteorder)
Sonni baytlarga o‘giradi.


x = 1024
b = x.to_bytes(2, byteorder='big')
print(b) # ➝ b'\x04\x00'


🔹 3. int.from_bytes(bytes, byteorder)
Baytdan son hosil qiladi.


b = b'\x04\x00'
x = int.from_bytes(b, byteorder='big')
print(x) # ➝ 1024


🔹 4. Dunder metodlar (__add__, __sub__, ...)
Arifmetik amallar uchun ichki metodlar:


x = 10
print(x.__add__(5)) # ➝ 15


🔹 5. int() funksiyasi
Turli turlardan butun songa o‘tkazish:


print(int("123")) # ➝ 123
print(int(12.8)) # ➝ 12
print(int(True)) # ➝ 1


🔹 6. math modulidagi funksiyalar
int bilan ishlaganda foydali bo‘ladigan funksiyalar:


import math

print(math.factorial(5)) # ➝ 120
print(math.gcd(24, 36)) # ➝ 12


Bonus:
Agar int tipidagi barcha metodlarni ko‘rmoqchi bo‘lsangiz:


print(dir(int))


💡 int — oddiy ko‘ringan bo‘lsa ham, kuchli imkoniyatlarga ega! Kodlaringizda undan to‘g‘ri foydalaning 😉
This media is not supported in your browser
VIEW IN TELEGRAM
Yozgan dasturi ishlamaganda, dasturchilarning muammoga yechim topish jarayoni! (hazil)😎
📊 Python: multimode() funksiyasi haqida batafsil

multimode() — bu statistics moduliga tegishli funksiya bo‘lib, berilgan ma'lumotlar ichida eng ko‘p uchraydigan element(lar) ro‘yxatini qaytaradi.

🔍 multimode() funksiyasi nima qiladi?

- multimode(data) funksiyasi data ichidagi eng ko‘p takrorlangan qiymat(moda)larni aniqlaydi.
- U bir nechta qiymatni qaytarishi mumkin — agar ularning takrorlanish soni bir xil bo‘lsa.
- Agar data bo‘sh bo‘lsa, u holda bo‘sh ro‘yxat ([]) qaytariladi.

📥 Argument:
data — bu istalgan iterable (masalan, list, tuple, str, set, h.k.)

📤 Natija:
Eng ko‘p uchragan qiymat(lar) ro‘yxati (list shaklida)

Foydalanish misollari:


from statistics import multimode

# Misol 1: bir nechta moda bor
print(multimode([1, 2, 2, 3, 3]))
# ➝ [2, 3] (ikkalasi ham 2 marta uchragan)

# Misol 2: faqat bitta moda bor
print(multimode([4, 4, 4, 5, 6]))
# ➝ [4]

# Misol 3: bo'sh ro'yxat
print(multimode([]))
# ➝ []


📌 Foydali eslatmalar:

- multimode() qiymatlarni aniqlangan tartibda qaytaradi — ya’ni data ichida qanday ketma-ketlikda bo‘lsa, shunday tartibda chiqadi.
- Bu funksiya mode() funksiyasidan farqli o‘laroq bir nechta modani qaytarishi mumkin, mode() esa faqat bitta moda beradi va ko‘p moda bo‘lsa xatolik chiqaradi.

🎯 Qayerda foydali?

- Ma’lumotlar tahlilida eng ko‘p uchraydigan qiymatlarni aniqlashda
- O‘quvchilar baholarini, so‘rovnoma natijalarini tahlil qilishda
- Statistika asosida qarorlar chiqarishda

💡 Misol hayotdan:
Agar sizda baholar ro‘yxati bo‘lsa:


grades = [5, 4, 5, 3, 4, 4, 5]
print(multimode(grades)) # ➝ [4, 5]


Demak, 4 va 5 eng ko‘p uchrayotgan baholar ekan.

🧠 Esda tuting:
multimode() — bu oddiy, lekin kuchli vosita. U sizga bir necha moda borligini aniqlash imkonini beradi — bu esa real statistik tahlilda juda muhim.
🔥1
🌐 Python: webbrowser moduli orqali veb-sahifa ochish

Agar siz Python dasturingizdan avtomatik tarzda brauzerda sayt ochmoqchi bo‘lsangiz — webbrowser moduli aynan siz uchun!

🔧 Asosiy funksiyasi:


import webbrowser

webbrowser.open("https://www.google.com")


Yuqoridagi kod — sizning standart brauzeringizda Google saytini ochadi.

📌 Foydali qo‘shimcha funksiyalar:

1. webbrowser.open_new(url)
Yangi brauzer oynasida sahifani ochadi.


webbrowser.open_new("https://t.me/python_uz")


2. webbrowser.open_new_tab(url)
Yangi tabda sahifani ochadi (agar mavjud bo‘lsa).


webbrowser.open_new_tab("https://youtube.com")


💡 Qayerda ishlatiladi?

- Telegram bot yoki GUI dasturdan sahifani ochish
- Hujjat, video, manba yoki havolani avtomatik ishga tushirish
- O‘quv loyihalarda foydalanuvchiga sayt ko‘rsatish

📎 Eslatma:

- webbrowser — bu Python'ga standart o‘rnatilgan modul, alohida o‘rnatish shart emas.
- Internetga ulangan bo‘lishingiz kerak.

Misol: Foydalanuvchi o‘zi tanlagan sahifani ochish:


url = input("Sayt manzilini kiriting: ")
webbrowser.open(url)


🚀 Foydali, oddiy va juda qulay!
webbrowser — bu dasturingizni real dunyo bilan bog‘lashning eng oson yo‘llaridan biri!
Query JSON

📌 JMESPath nima?

JMESPath — bu JSON uchun so‘rov tili bo‘lib, murakkab tuzilmadagi JSON'dan kerakli ma’lumotni juda oson va aniq tarzda ajratib olish imkonini beradi. Python’da jmespath kutubxonasi orqali ishlatiladi.

🔧 Foydasi nimada?
JSON'ni qidirish juda sodda bo‘ladi
Murakkab tuzilmalar bilan ishlash osonlashadi
So‘rovlar aniq va ixcham yoziladi

🧪 Misol: Ko‘p elementli murakkab JSON bilan ishlash


import jmespath

data = {
"company": {
"name": "TechSoft",
"location": "Tashkent",
"departments": [
{
"name": "Engineering",
"employees": [
{"name": "Ali", "age": 30, "skills": ["Python", "C++"]},
{"name": "Laylo", "age": 27, "skills": ["Java", "Kotlin"]}
]
},
{
"name": "Marketing",
"employees": [
{"name": "Vali", "age": 24, "skills": ["SEO", "Content"]},
{"name": "Zarina", "age": 29, "skills": ["SMM", "Copywriting"]}
]
}
]
}
}


🔍 1. Barcha xodimlarning ismlarini olish:


result = jmespath.search("company.departments[*].employees[*].name", data)
# Natija: [['Ali', 'Laylo'], ['Vali', 'Zarina']]


🔍 2. Faqat Engineering bo‘limidagi xodimlar yoshi:


result = jmespath.search("company.departments[?name=='Engineering'].employees[*].age", data)
# Natija: [[30, 27]]


🔍 3. Marketing bo‘limidagi barcha skill'lar:


result = jmespath.search("company.departments[?name=='Marketing'].employees[*].skills", data)
# Natija: [[['SEO', 'Content'], ['SMM', 'Copywriting']]]


🔗 Ko‘proq o‘rganish uchun: jmespath.org
📦 Python kutubxonasi: pip install jmespath
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Dasturdagi xatoliklar va meni o'rtamizdagi munosabatlar🤝
🔤 swapcase() metodi — harflar registrini teskari qilish

Python'dagi swapcase() metodi — bu str (matn) tipidagi obyektlar uchun mavjud bo‘lgan ichki metod bo‘lib, har bir harfning registrini teskari qiladi.

👉 Ya’ni:
Katta harf — kichikka aylanadi
Kichik harf — kattaga aylanadi

🧪 Misol:


text = "Hello, World!"
result = text.swapcase()
print(result)  # Natija: hELLO, wORLD!


🟢 Bu metod foydali bo‘lishi mumkin:

- Matnni testlashda
- Foydalanuvchi kiritgan ma’lumotni normallashtirishda
- Kod yozishda kreativ usullarda
🔥1
⏱️ Kodingiz tezligini o‘lchang – timeit yordamida!
Ba’zida kodimiz qanchalik samarali ishlashini tezda aniqlashimiz kerak bo‘ladi. Buni oddiy time bilan emas, balki timeit moduli orqali amalga oshirgan ma’qul — bu aniq, ishonchli va takrorlanuvchan usul.

🔍 Nega aynan `timeit`?
- Qo‘shimcha xarajatlarni hisobga oladi
- Interpreter qizishini inobatga oladi
- Kodni izolyatsiyada bajaradi
- Natijani bir necha marta o‘lchab, eng real vaqtni beradi

🧪 Oddiy misol

import timeit

# Kodni 10 000 marta ishlatib, umumiy vaqtni o‘lchash
print(timeit.timeit("'-'.join(str(n) for n in range(100))", number=10000))


🔁 Ikkita yechimni solishtirish

setup_code = "nums = list(range(100))"

stmt1 = "'-'.join(str(n) for n in nums)"
stmt2 = "'-'.join(map(str, nums))"

print("Generator:", timeit.timeit(stmt1, setup=setup_code, number=10000))
print("map: ", timeit.timeit(stmt2, setup=setup_code, number=10000))


🛠 Tavsiyalar
- setup= orqali boshlang‘ich ma’lumotlarni tayyorlang
- number= bilan kod necha marta ishlatilishini belgilang
- repeat() yordamida bir necha marta o‘lchab, eng ishonchli natijani oling

🎯 Xulosa
timeit — kod yechimlarini solishtirish va eng tezini tanlash uchun ajoyib vosita. Mikrooptimizatsiya uchun ayni muddao!
🔥1
⏱️ Qanday kodlarning tezligini timeit bilan o‘lchash mumkin, qaysilariniki mumkin emas?
Kod samaradorligini tekshirishda ko‘pchilik timeit modulidan foydalanadi. Lekin har qanday kod uchun bu vosita mos kelavermaydi. Keling, nima mumkin, nima mumkin emas — aniqlashtirib olamiz.

timeit bilan o‘lchash mumkin bo‘lgan kodlar:
1. Kichik, tez ishlovchi kodlar
Misol: ro‘yxat yaratish, string birlashtirish, matematik hisoblash


timeit.timeit("sum(range(1000))", number=10000)


2. Bir nechta algoritm tezliklarini solishtirish
Masalan: map() va list comprehension. Chunki bazi holatlarda bizga eng muhim narsa tezlik bo'ladi va hattoki millisoniyalar uchun kurashamiz.


# Qaysi tezroq ishlaydi?
"'_'.join(map(str, range(100)))"
"'_'.join(str(i) for i in range(100))"


3. Funksiya ichidagi hisoblashlar (rekursiya, sikl, qidiruv)


def is_even(n): return n % 2 == 0
timeit.timeit("is_even(42)", globals=globals(), number=1000000)


timeit bilan o‘lchash tavsiya etilmaydigan kodlar:
1. Tashqi omillarga bog‘liq kodlar
(Masalan: Internet, fayl o‘qish, API so‘rovlar, ma’lumotlar bazasi)


# Bunday kodlar bir marta sekin, bir marta tez ishlashi mumkin
requests.get("https://example.com")


2. Selenium, YouTube, WebScraping kodlari
Brauzer ochilishi, sahifa yuklanishi, reklamalar, JS kodlari — bular natijani beqaror qiladi.

3. Katta resurs talab qiladigan ishlar
Masalan: katta faylni ochish, rasmni qayta ishlash, video tahlili — bular `timeit`ni haddan ortiq sekinlashtiradi.

🟡 Bunday holatlarda nima qilish kerak?
💡 Oddiy usul — time moduli yordamida vaqtni o‘lchash:


import time
start = time.time()

# Murakkab kod, masalan: web scraping
# ...

end = time.time()
print(f"Bajarilish vaqti: {end - start:.2f} soniya")


🎯 Xulosa:
Kichik, mustaqil hisob-kitob Ha
Funksiya ichidagi algoritm Ha
Web scraping / API / Selenium Yo‘q
Internetga bog‘liq ishlar Yo‘q
Katta fayl bilan ish ⚠️ Ehtiyot bilan
🔥1
Iyun oyidan boshlab video darslar tayyorlash niyatimiz bor, sizlarga qiziq mavzularni bilsak ko'proq shular bo'yicha videolar tayyorlardik
🧩 Merge Sort (Birlashtirish orqali saralash) algoritmi — Python’da amaliy ko‘rinish

🔹 Merge Sort — bu klassik “bo‘lib boshqar” (divide and conquer) yondashuviga asoslangan saralash algoritmi bo‘lib, u barqaror va ishonchli ishlashi bilan mashhur.

⚙️ Algoritm qanday ishlaydi?
1. Bo‘lish (Divide):
- Ro‘yxat teng yoki tengga yaqin ikkiga bo‘linadi.
- Har bir kichik ro‘yxat yana bo‘linadi — bu jarayon rekursiv davom etadi.

2. Birlashtirish (Merge):
- Eng kichik bo‘laklar saralanadi va ketma-ketlikda bitta tartiblangan ro‘yxatga birlashtiriladi.

🧪 Python’da amalga oshirish:

def merge_sort(arr):
if len(arr) <= 1:
return arr

middle = len(arr) // 2
left = merge_sort(arr[:middle])
right = merge_sort(arr[middle:])

return merge(left, right)

def merge(left, right):
result = []
i = j = 0

# Ikkala ro‘yxatni solishtirib birlashtiramiz
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1

# Qolgan elementlarni qo‘shamiz
result.extend(left[i:])
result.extend(right[j:])
return result

# Misol:
nums = [38, 27, 43, 3, 9, 82, 10]
print(merge_sort(nums)) # Natija [3, 9, 10, 27, 38, 43, 82]


📊 Tahlil:
- ⏱️ Vaqt murakkabligi: O(n log n) (eng yaxshi, o‘rtacha va yomon holatda ham)
- 💾 Xotira murakkabligi: O(n) (qo‘shimcha xotira kerak bo‘ladi)

🛠 Optimallashtirish usullari:
Kichik bo‘limlar uchun insertion sort ishlatish (kam sonli elementlarda samaraliroq)

Agar pastki ro‘yxatlar allaqachon tartiblangan bo‘lsa — qayta saralashni o‘tkazib yuborish mumkin

Har safar yangi ro‘yxat yaratmasdan, bitta yordamchi massiv orqali birlashtirishni amalga oshirish — bu xotira sarfini kamaytiradi

🔚 Merge Sort — bu algoritmik jihatdan samarali va doimiy O(n log n) ishlash kafolatini beruvchi kuchli usul. Kodni tushunish oson, optimallashtirish imkoniyatlari esa uni real loyihalarda ishlatishga mos qiladi.
🔗 Python’da istisnolarni zanjirlash (exception chaining) — xatoliklar sababi yo‘qolib ketmasin

Dasturda murakkab jarayonlar bajarilganda, ichma-ich try-except bloklar bo‘lishi odatiy hol. Ba’zida bir xatolik boshqa bir xatolikni keltirib chiqaradi. Ana shunday vaziyatda istisnolarni zanjirlash texnikasi ishga tushadi.

Python’da bu raise ... from ... sintaksisi orqali amalga oshiriladi.

🧠 "Istisnolarni zanjirlash" o'zi nima?
Bu — bir istisno (xatolik) boshqa bir istisnoning natijasi ekanini aniq ko‘rsatish imkonini beradi. Ya’ni, dasturning yuqori darajasida xatolik chiqqanda, u avvalgi chuqurroq xatolikdan kelib chiqqanini yo‘qotmasdan bildiradi.

🧪 Misol:

def hisobla():
try:
natija = 1 / 0
except ZeroDivisionError as e:
raise ValueError("Hisoblashda xatolik!") from e

hisobla()


🔍 Bu yerda:

- 1 / 0 — ZeroDivisionError xatosini keltirib chiqaradi
- U except blokida ushlanadi
- Yangi istisno (ValueError) shu xatolik asosida qayta chiqariladi
- from e — eski istisno (e) bilan bog‘laydi

📋 Natijada konsolda quyidagi zanjirli xatolik chiqadi:
Traceback (most recent call last):
...
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

ValueError: Hisoblashda xatolik!

➡️ Bu yerda ikkita xatolik birgalikda ko‘rsatilgan. Ilk sabab (0 ga bo‘lish) yo‘qolmaydi.

📌 Qanday foyda bor?
- Dasturchi sifatida asl xatoni aniqlash ancha oson bo‘ladi
- Log fayllari yoki monitoring tizimlarida muammoning kelib chiqish tarixini ko‘rish mumkin
- Xatoliklar ichki kontekstda saqlanadi, ya’ni nima sababli nima yuz bergani aniq yoziladi

⚠️ E’tiborli jihat:
Agar from qismini yozmasangiz, Python avtomatik tarzda context orqali istisnoni bog‘lab qo‘yadi, lekin bu holatda xatolik "during handling of the above exception" degan ko‘rinishda chiqadi. Ammo from orqali yozish — aniq, toza va nazorat ostidagi usul hisoblanadi.

🔚 Xulosa:

raise ... from ... — murakkab dasturlarda xatoliklarni shaffof va chuqur tahlil qilish imkonini beruvchi kuchli vosita.

Uni o‘z loyihalaringizda ishlatish — professional yondashuv belgisidir.
👍1🔥1
Tasavvur qiling sizga 1 dan n gacha bo'lgan sonlarni vergul bilan ajratib yozilgan shaklga keltirish talab etildi.
Masalan n=5 bo'lganda siz 1, 2, 3, 4, 5 ni hosil qilishingiz kerak.
Diqqat savol: siz quyidagi usullardan qaysi birini tanlagan bo'lardingiz va nima uchun?

1.
natija = "1"
for i in range(2, n + 1):
natija += f", {i}"


2.
natija = ", ".join(str(i) for i in range(1, n + 1))
print(natija)


Izohlarda, fikringizni yozib qoldiring.

@simplypythonuz
🔥2
groupby() funksiyasi nima qiladi?

groupby() — bu Python'dagi itertools modulidagi funksiya. U iterable obyektlarddagi (u list, tuple, str, dict va boshqalar) bir xil va ketma-ket bo'lgan elementlarni guruhlab beradi.

Qanday ishlaydi?
Tasavvur qiling: sizga tartiblangan ro‘yxat berilgan, masalan:


['A', 'A', 'B', 'B', 'B', 'C']

groupby() bu ro‘yxatni quyidagicha ko‘rib chiqadi:
- Dastlab 1-elementni ('A') oladi va undan keyin ketma-ket kelgan va u bilan bir xil bo'lgan elementlarni topadi va ularni bitta guruhga qo‘shadi.
- So‘ng 'B' larni topadi — ularni ham alohida guruh qiladi.
- Va nihoyat 'C' — bu ham o‘z guruhiga kiradi.

Ya’ni, groupby() ketma-ket kelgan bir xil qiymatlarni bir guruhga birlashtiradi.

Muhim!
groupby() faqat ketma-ket bir xil elementlarni guruhlaydi. Shuning uchun ro‘yxatni avval tartiblab olish kerak.

Tartiblangan ro'yxat uchun misol:


from itertools import groupby

data = ['A', 'A', 'B', 'B', 'C', 'A']

# Avval tartiblaymiz
data = sorted(data)

# So'ng guruhlaymiz
for key, group in groupby(data):
print(key, list(group))

Natija:


A ['A', 'A', 'A']
B ['B', 'B']
C ['C']

Tartiblanmagan ro'yxat uchun misol:

from itertools import groupby

data = ['A', 'A', 'B', 'B', 'B', 'C', 'A']

for key, group in groupby(data):
print(key, list(group))

Natija:

A ['A', 'A']
B ['B', 'B', 'B']
C ['C']
A ['A']


Nega oxirida yana 'A' chiqdi?
Sababi: groupby() faqat ketma-ket (ya’ni birin-ketin) bir xil bo‘lgan elementlarni guruhlaydi.
Ro‘yxatda 'A' boshida ikki marta ketma-ket kelgan — ularni birinchi guruhga oldi.
Oxirida yana bitta 'A' bor, lekin u oldingi 'C' dan keyin kelgan, shuning uchun u yangi guruh bo‘ladi.
Python dasturlash tilida ma'lumot turlarini (data types) o'zgaruvchan (mutable) va o'zgarmas (immutable) kategoriylarga ajratish mumkin bo'lib, ularning guruhlari quyidagicha:

O'zgarmas ma'lumot turlariga
- int
- float
- str
- tuple

va shu kabi bir qancha ma'lumot turlari.

O'zgaruvchan ma'lumot turlariga esa
- list
- dict
- set

va shu kabi bir qancha ma'lumot turlari.

O'zgarmas ma'lumot turlariga o'zgartirish kiritmoqchi bo'lganimizda, mavjud obyekt qiymati o'zgarishi o'rniga yangi obyekt hosil qilinadi. Masalan,
 
text = "Hello"
text += " World"

kodi, 2 ta str obyekti yaratilishiga olib keladi. Birinchisi "Hello" ni saqlayotgan, ikkinchisi esa "Hello World" ni.
Buni obyektlarning xotiradagi manzili o'zgarishidan ham bilib olish mumkin:
text = "Hello"
print(id(text))
text += " World"
print(id(text))

Xuddi shuni list misolida ko'rsak xotira manzili o'zgarmayotganligiga guvoh bo'lamiz:
numbers = [1, 2, 3]
print(id(numbers))
numbers.append(4)
print(id(numbers))

Endi yuqoridagi so'rovnomadagi usullarni o'rganib chiqsak:

1-usulda natija nomli str obyekt yaratilib u n marta o'zgartirilmoqda, bundan tashqari har o'zgartirishda unga o'zidan oldingi qiymat ko'chirilmoqda. Ya'ni n=5 bo'lganda 1 1, 2 1, 2, 3 1, 2, 3, 4 1, 2, 3, 4, 5
qiymatli str obyektlar yaratilmoqda, bu esa ham xotira ham tezlik tomonidan juda samarasiz hisoblanadi. To'g'ri, n kichik qiymatlarda hech narsa emasdir, lekin n ning qiymati oshgan sari muammolarni keltirib chiqaradi.

2-usulda esa python generatordan foydalangan holda sonlar hosil qilinib, oxirida bitta natijani saqlovchi str obyekt hosil qilinmoqda. Demak, bu usulda n ta str obyektlari (hech qanday ko'chirish muammolarisiz) hamda natijani saqlovchi str obyekt yaratilmoqda. Bu usul ancha samarali hisoblanadi.
groupby() funksiyasi nima qiladi?

groupby() — bu Python'dagi itertools modulidagi funksiya. U iterable obyektlarddagi (u list, tuple, str, dict va boshqalar) bir xil va ketma-ket bo'lgan elementlarni guruhlab beradi.

Qanday ishlaydi?
Tasavvur qiling: sizgaga tartiblangan ro‘yxat berilgan, masalan:


['A', 'A', 'B', 'B', 'B', 'C']

groupby() bu ro‘yxatni quyidagicha ko‘rib chiqadi:
- Dastlab 1-elementni ('A') oladi va undan keyin ketma-ket kelgan va u bilan bir xil bo'lgan elementlarni topadi va ularni bitta guruhga qo‘shadi.
- So‘ng 'B' larni topadi — ularni ham alohida guruh qiladi.
- Va nihoyat 'C' — bu ham o‘z guruhiga kiradi.

Ya’ni, groupby() ketma-ket kelgan bir xil qiymatlarni bir guruhga birlashtiradi.

Muhim!
groupby() faqat ketma-ket bir xil elementlarni guruhlaydi. Shuning uchun ro‘yxatni avval tartiblab olish kerak.

Tartiblangan ro'yxat uchun misol:


from itertools import groupby

data = ['A', 'A', 'B', 'B', 'C', 'A']

# Avval tartiblaymiz
data = sorted(data)

# So'ng guruhlaymiz
for key, group in groupby(data):
print(key, list(group))

Natija:

A ['A', 'A', 'A']
B ['B', 'B']
C ['C']

Tartiblanmagan ro'yxat uchun misol:

from itertools import groupby

data = ['A', 'A', 'B', 'B', 'B', 'C', 'A']

for key, group in groupby(data):
print(key, list(group))

Natija:

A ['A', 'A']
B ['B', 'B', 'B']
C ['C']
A ['A']


Nega oxirida yana 'A' chiqdi?
Sababi: groupby() faqat ketma-ket (ya’ni birin-ketin) bir xil bo‘lgan elementlarni guruhlaydi.
Ro‘yxatda 'A' boshida ikki marta ketma-ket kelgan — ularni birinchi guruhga oldi.
Oxirida yana bitta 'A' bor, lekin u oldingi 'C' dan keyin kelgan, shuning uchun u yangi guruh bo‘ladi.
groupby() funksiyasining har xil turdagi iterable lar bilan ishlatilishi:

1. List (ro‘yxat) bilan

from itertools import groupby

data = ['a', 'a', 'b', 'b', 'c']
for key, group in groupby(data):
print(key, list(group))

Natija:

a ['a', 'a']
b ['b', 'b']
c ['c']


2. Tuple (kortej) bilan

from itertools import groupby

data = ('x', 'x', 'y', 'z', 'z')
for key, group in groupby(data):
print(key, list(group))

Natija:

x ['x', 'x']
y ['y']
z ['z', 'z']


3. Str (matn) bilan

from itertools import groupby

text = "aaabbccaaa"
for key, group in groupby(text):
print(key, ''.join(group))

Natija:

a aaa
b bb
c cc
a aaa


4. Dict (lug‘at) — elementlari bo‘yicha

from itertools import groupby

data = [
{'type': 'fruit', 'name': 'apple'},
{'type': 'fruit', 'name': 'banana'},
{'type': 'vegetable', 'name': 'carrot'},
{'type': 'fruit', 'name': 'pear'},
]

# Avval 'type' bo‘yicha tartiblash kerak
data.sort(key=lambda x: x['type'])

for key, group in groupby(data, key=lambda x: x['type']):
print(key, list(group))

Natija:

fruit [{'type': 'fruit', 'name': 'apple'}, {'type': 'fruit', 'name': 'banana'}, {'type': 'fruit', 'name': 'pear'}]
vegetable [{'type': 'vegetable', 'name': 'carrot'}]


5. Fayl satrlari bilan
Faylda quyidagi matn bo‘lsin (masalan, data.txt):


apple
apple
banana
banana
carrot


from itertools import groupby

with open('data.txt') as f:
for key, group in groupby(f):
print(key.strip(), list(map(str.strip, group)))

Natija:

apple ['apple', 'apple']
banana ['banana', 'banana']
carrot ['carrot']

Eslatma: groupby() ketma-ket bir xil satrlarni guruhlaydi, shuning uchun fayl satrlari bir xil va ketma-ket bo‘lishi kerak.

6. Generator bilan

from itertools import groupby

def generate():
yield from ['a', 'a', 'b', 'b', 'c']

for key, group in groupby(generate()):
print(key, list(group))

Natija:

a ['a', 'a']
b ['b', 'b']
c ['c']
Isoqjanov Ilyos | Python
⏱️ Kodingiz tezligini o‘lchang – timeit yordamida! Ba’zida kodimiz qanchalik samarali ishlashini tezda aniqlashimiz kerak bo‘ladi. Buni oddiy time bilan emas, balki timeit moduli orqali amalga oshirgan ma’qul — bu aniq, ishonchli va takrorlanuvchan usul. …
🔁 repeat()Ko‘p marotaba o‘lchash va ishonchli natija olish
timeit.timeit() odatda bitta marta test qilib, umumiy vaqtni qaytaradi. Ammo:

🧠 Har doim bitta o‘lchovga ishonib bo‘lmaydi — boshqa dasturlar, tizim yuklanishi, yoki tasodifiy omillar vaqtga ta’sir qilishi mumkin.

Shuning uchun timeit.repeat() funksiyasi mavjud. U bir nechta marta o‘lchov qiladi va har birining vaqtini qaytaradi.

📌 Sintaksisi:

timeit.repeat(stmt, setup, repeat=3, number=10000)


stmt O‘lchanadigan kod (masalan, 'sum(range(100))')
setup Tayyorlovchi kod (o‘zgaruvchilarni tayyorlash)
number Har bir o‘lchovda kod necha marta ishlatilishi kerakligini belgilaydi
repeat Umumiy o‘lchov necha marta takrorlanadi (masalan: 3 marta)

🧪 Misol:

import timeit

setup_code = "nums = list(range(100))"
stmt = "'-'.join(map(str, nums))"

results = timeit.repeat(stmt=stmt, setup=setup_code, repeat=5, number=10000)
print(results)


🟢 Yuqoridagi misol natijasi:

[0.285, 0.283, 0.284, 0.286, 0.282]


🔹 Bu degani: kod 10 000 marta bajarildi, 5 marta ketma-ket o‘lchandi.
🔹 Har bir element — alohida o‘lchovda ketgan sekundlar soni.

🎯 Afzalliklari:
- Tizimdagi tasodifiy yuklanishlar ta’sirini kamaytiradi.
- Eng kichik, o‘rtacha yoki median qiymatni olib, eng aniq vaqtni aniqlash mumkin:


min_time = min(results)
print(f"Eng tez ishlagan vaqt: {min_time}")


Xulosa:
repeat() yordamida:
- Har xil holatlarda kod qanday ishlashini ko‘rasiz,
- Natijani yanada ishonchli va barqaror qilasiz.
📍 tell() funksiyasi — oqimdagi hozirgi pozitsiyani aniqlash

Python’da tell() funksiyasi oqim (stream) ichidagi kursorning hozirgi pozitsiyasini aniqlash uchun ishlatiladi. Bu asosan fayllar bilan ishlaganda keng qo‘llaniladi, lekin boshqa oqim turlarida ham (masalan, soketlar yoki konsol kirishi) ishlatilishi mumkin.

🧪 Misol:


with open("example.txt", "r") as file:
print(file.tell()) # Fayl boshidagi pozitsiya (0)
file.read(10) # 10 bayt o‘qiladi
print(file.tell()) # Endi pozitsiya 10 bo‘ladi


📤 Natija: 0 va 10 — bu baytlar soni bo‘yicha oqimdagi joylashuv.

🟢 Muhim jihatlar:
- tell() argument olmaydi
- Natija — oqim boshidan boshlab hozirgi pozitsiyaga qadar baytlar soni
- Fayl o‘qish/yozishda pozitsiyani aniqlashda foydali

🔄 Bonus: seek() funksiyasi haqida qisqacha

Agar siz fayldagi kursorni aniq bir joyga ko‘chirmoqchi bo‘lsangiz, seek(offset) funksiyasidan foydalaniladi:


file.seek(0) # Kursorni fayl boshiga qaytaradi


tell() qayerda ekanligingizni bildirsa, seek() sizni istalgan joyga olib boradi.

Izohlarda, fikringizni yozib qoldiring.

@simplypythonuz