Hurmatli kanalimiz a'zolari, kanalimizda qanday ma'lumotlar berib borilishini xoxlaysizlar?
Anonymous Poll
14%
Desktop applicationlar haqida
71%
Django, FastAPI bo'yicha
7%
Komentariyada ko'p so'ralgan mavzular bo'yicha darslar
36%
Kichik tayyor funksiyalar
14%
Video ko'rinishidagi darslar
36%
Pythondagi qiziqarli va ehtimol kimlar uchundir yangi bo'lgan methodlar
21%
Boshlovchilar uchun noldan tushuntirilgan videolar
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:
📊 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.
🔹 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:
🔍 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:
➡️ 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.
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.
2.
Izohlarda, fikringizni yozib qoldiring.
@simplypythonuz
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:
- 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!
Tartiblangan ro'yxat uchun misol:
Natija:
Tartiblanmagan ro'yxat uchun misol:
Natija:
Nega oxirida yana 'A' chiqdi?
Sababi:
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() — 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,
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:
Xuddi shuni list misolida ko'rsak xotira manzili o'zgarmayotganligiga guvoh bo'lamiz:
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.
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:
- 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!
Tartiblangan ro'yxat uchun misol:
Natija:
Tartiblanmagan ro'yxat uchun misol:
Natija:
Nega oxirida yana 'A' chiqdi?
Sababi:
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() — 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
Natija:
✅ 2. Tuple (kortej) bilan
Natija:
✅ 3. Str (matn) bilan
Natija:
✅ 4. Dict (lug‘at) — elementlari bo‘yicha
Natija:
✅ 5. Fayl satrlari bilan
Faylda quyidagi matn bo‘lsin (masalan, data.txt):
Natija:
Eslatma: groupby() ketma-ket bir xil satrlarni guruhlaydi, shuning uchun fayl satrlari bir xil va ketma-ket bo‘lishi kerak.
✅ 6. Generator bilan
Natija:
✅ 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. …
🔁
🧠 Har doim bitta o‘lchovga ishonib bo‘lmaydi — boshqa dasturlar, tizim yuklanishi, yoki tasodifiy omillar vaqtga ta’sir qilishi mumkin.
Shuning uchun
📌 Sintaksisi:
🧪 Misol:
🟢 Yuqoridagi misol natijasi:
🔹 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:
✅ Xulosa:
- Har xil holatlarda kod qanday ishlashini ko‘rasiz,
- Natijani yanada ishonchli va barqaror qilasiz.
repeat() — Ko‘p marotaba o‘lchash va ishonchli natija olishtimeit.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 belgilaydirepeat 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:
📤 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:
tell() qayerda ekanligingizni bildirsa, seek() sizni istalgan joyga olib boradi.
Izohlarda, fikringizni yozib qoldiring.
@simplypythonuz
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
🔗 Python’da havolalarni qisqartirish – juda oson!
Ba’zida havola juda uzun bo‘lib ketadi va uni qisqa, ixcham shaklda ulashish qulayroq. Buning uchun pyshorteners kutubxonasi yordamida havolani atigi uch qator kod bilan qisqartirish mumkin.
🧪 Kod namunasi:
📌 Afzalliklari:
- Juda tez ishlaydi
- API kaliti talab qilmaydi
- Uzun linklar endi muammo emas
📦 O‘rnatish:
Endi havolalaringizni ixcham shaklda joylashtirish juda oddiy. Har qanday ilova, bot yoki loyiha uchun foydali!
Ba’zida havola juda uzun bo‘lib ketadi va uni qisqa, ixcham shaklda ulashish qulayroq. Buning uchun pyshorteners kutubxonasi yordamida havolani atigi uch qator kod bilan qisqartirish mumkin.
🧪 Kod namunasi:
import pyshorteners
s = pyshorteners.Shortener()
short_url = s.isgd.short("https://python.org/doc")
print(short_url)
# natija https://is.gd/q7qNXq
📌 Afzalliklari:
- Juda tez ishlaydi
- API kaliti talab qilmaydi
- Uzun linklar endi muammo emas
📦 O‘rnatish:
pip install pyshorteners
Endi havolalaringizni ixcham shaklda joylashtirish juda oddiy. Har qanday ilova, bot yoki loyiha uchun foydali!
👍2🔥1
Assalomu alaykum! Bugun sizlar bilan python ning oddiy lekin juda foydali imkoniyatini ko'rsak.
Ko'pchilik, boshqa dasturlash tillaridan python ga o'tgan dasturchilar ikki o'zgaruvchining qiymatlarini quyidagi "classik" usuldan foydalangan holda almashtiradi:
Bu ishning "pythonic" usuli esa quyidagicha:
Hatto, a va b ni e'lon qilishni ham shu usulda bajarsak bo'ladi:
Xo'sh, endi savol tug'iladi: python buni qanday amalga oshirmoqda?! Siz ham bu haqida biroz o'ylang.
Ha, topdingiz! Bu tuple. Shunchaki tenglikdan keyingi ifodalarda qavs mavjud deb tasavvur qiling va bo'ldi, muammo hal.
Bizni kuzatib boring hamda python o'rganayotgan do'stingizga ham ulashishni unutmang!
@simplypythonuz
Ko'pchilik, boshqa dasturlash tillaridan python ga o'tgan dasturchilar ikki o'zgaruvchining qiymatlarini quyidagi "classik" usuldan foydalangan holda almashtiradi:
a = 4
b = 5
temp = a
a = b
b = temp
print(a)
print(b)
Bu ishning "pythonic" usuli esa quyidagicha:
a = 4
b = 5
a, b = b, a
print(a)
print(b)
Hatto, a va b ni e'lon qilishni ham shu usulda bajarsak bo'ladi:
a, b = 4, 5
Xo'sh, endi savol tug'iladi: python buni qanday amalga oshirmoqda?! Siz ham bu haqida biroz o'ylang.
Ha, topdingiz! Bu tuple. Shunchaki tenglikdan keyingi ifodalarda qavs mavjud deb tasavvur qiling va bo'ldi, muammo hal.
Bizni kuzatib boring hamda python o'rganayotgan do'stingizga ham ulashishni unutmang!
@simplypythonuz
🔥2
🐍 Python’da Chiroyli Jadval Yaratish (Konsolga chiqarish uchun)
Agar siz Pythonda matnli ma’lumotlarni chiroyli tarzda konsolga chiqarish (masalan, dars paytida, imtihon uchun yoki log ko‘rinishida) ni istasangiz — 🏆
📌
🔧 O‘rnatish:
💡 Oddiy foydalanish misoli:
✨ Qo‘shimcha imkoniyatlar:
✅ Ustun bo‘yicha saralash: table.sortby = "Yosh"
✅ Tekislash: table.align["Ism"] = "l" (chapga)
✅ Faylga saqlash: str(table) ni faylga yozib qo‘yish mumkin
🔁 Do‘stlaringiz bilan bo‘lishing! @simplypythonuz
Agar siz Pythonda matnli ma’lumotlarni chiroyli tarzda konsolga chiqarish (masalan, dars paytida, imtihon uchun yoki log ko‘rinishida) ni istasangiz — 🏆
PrettyTable kutubxonasi aynan siz uchun!📌
PrettyTable — bu terminalda jadval ko‘rinishida ma’lumot chiqarishga mo‘ljallangan oddiy va qulay kutubxona.🔧 O‘rnatish:
pip install prettytable
💡 Oddiy foydalanish misoli:
from prettytable import PrettyTable
# Jadval yaratish
table = PrettyTable()
# Ustun nomlarini qo‘shamiz
table.field_names = ["Ism", "Yosh", "Kasb"]
# Qatorlar qo‘shamiz
table.add_row(["Ali", 25, "Dasturchi"])
table.add_row(["Laylo", 22, "Dizayner"])
table.add_row(["Javlon", 30, "Analitik"])
# Jadvalni chiqarish
print(table)
✨ Qo‘shimcha imkoniyatlar:
✅ Ustun bo‘yicha saralash: table.sortby = "Yosh"
✅ Tekislash: table.align["Ism"] = "l" (chapga)
✅ Faylga saqlash: str(table) ni faylga yozib qo‘yish mumkin
🔁 Do‘stlaringiz bilan bo‘lishing! @simplypythonuz
Yuqoridagi kod nimani qaytaradi?
Anonymous Quiz
50%
[1] va [1]
0%
[1, 1] va [1, 1]
36%
[1] va [1, 1]
14%
Error