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
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
🔗 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:


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:

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 — 🏆 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
Quyidagi kod nima qaytaradi?
x = [1, 2, 3]
y = x
y.append(4)
print(x)
Yuqoridagi savolni javobini belgilang
Anonymous Quiz
8%
[1, 2, 3]
85%
[1, 2, 3, 4]
8%
[4]
0%
Error
def func(x=[]):
x.append(1)
return x

print(func())
print(func())
Yuqoridagi kod nimani qaytaradi?
Anonymous Quiz
50%
[1] va [1]
0%
[1, 1] va [1, 1]
36%
[1] va [1, 1]
14%
Error
print(bool("False"))
Yuqoridagi kod nimani qaytaradi?
Anonymous Quiz
54%
False
15%
True
8%
None
23%
Error
print(0.1 + 0.2 == 0.3)
Yuqoridagi kod nimani qaytaradi?
Anonymous Quiz
33%
True
47%
False
7%
Error
13%
None
print(3 * 'abc')
Yuqoridagi kod nimani qaytaradi?
Anonymous Quiz
83%
'abcabcabc'
0%
'abc3'
17%
Error
0%
'abc abc abc'