Python enumerate() nima?
Pythonda ro'yxatdagi elementlarni aylanib chiqayotganda ba'zan elementning o'zi bilan birga uning tartib raqami ham
kerak bo'ladi. Masalan foydalanuvchilar ro'yxatini ekranga 1. Akmal, 2. Bekzod, 3. Sherzod ko'rinishida
chiqarish kerak. Shunday paytda enumerate() ishlatiladi.
Oddiy qilib aytganda enumerate() list, tuple, string yoki boshqa iterable obyektni aylanib chiqadi va har bir
elementga tartib raqam qo'shib beradi.
Keling ro'yxatdagi ismlarni tartib raqami bilan chiqaramiz:
| python_enumerate.py | |
|---|---|
Natija:
Bu yerda enumerate(names) har safar ikkita qiymat qaytaryapti:
index- elementning tartib raqaminame- ro'yxatdagi elementning o'zi
Pythonda index odatda 0 dan boshlanadi. Shuning uchun birinchi elementning indexi 0.
Foydalanuvchiga ko'rinadigan ro'yxatlarda raqamni 0 dan boshlash to'g'ri bo'lmaydi. Bunday holatda sanash 1 dan
boshlanadi. enumerate() da buning uchun start parametri bor:
| python_enumerate.py | |
|---|---|
Natija:
Ko'p holatlarda start=1 juda qulay. Masalan, menyu, ro'yxat, jadval qatori yoki fayldagi qator raqamini ko'rsatishda.
Boshlovchilar ko'pincha bunday kod yozadi:
| range_len.py | |
|---|---|
Bu kod ishlaydi. Lekin uni o'qish biroz qiyinroq. enumerate() bilan esa maqsad aniqroq ko'rinadi:
| python_enumerate.py | |
|---|---|
Bu kodni o'qigan odam darhol tushunadi.
Tip
Agar sizga element ham, uning tartib raqami ham kerak bo'lsa enumerate() ishlating.
enumerate() qanday ishlaydi?
enumerate() ni taxminan mana bunday tasavvur qilish mumkin:
| python_enumerate.py | |
|---|---|
Ya'ni har bir element yoniga bitta raqam qo'shilyapdi.
Muhim jihati enumerate() hamma elementlarni oldindan yangi ro'yxat qilib yaratib olmaydi. U elementlarni generator
bilan bittalab beradi. Shu sabab katta fayl yoki uzun ro'yxatlar bilan ishlash qulay.
Fayllar bilan ishlaganda ham enumerate() dan foydalanish kod yozishni anacha samarali qiladi. Masalan fayldagi bo'sh
qatorlarni topmoqchimiz bunda quyidagicha ish qilishimiz mumkin:
| enumerate_file.py | |
|---|---|
Faylning 5-qatori bo'sh bo'lsa xabar ham foydalanuvchiga tushunarli chiqadi:
enumerate() list comprehension ichida ham ishlatiladi. Masalan ismlarni ro'yxatda raqamlaymiz:
| enumerate_comprehension.py | |
|---|---|
Natija:
Bu usul qisqa va tushunarli. Lekin kod juda murakkablashib ketsa, oddiy for bilan yozgan yaxshiroq.
enumerate()ni dictionary bilan ham ishlatishimiz mumkin. Lekin ehtiyot bo'lish kerak. Dictionary ustida ishlatilsa,
dictionarydagi kalitlarni raqamlaydi:
| enumerate_dict.py | |
|---|---|
Natija:
Bu yerda value kelmadi. Faqat kalitlar keldi. Agar dictionarydan key va value olish kerak bo'lsa, items()
ishlatiladi:
| dict_items.py | |
|---|---|
Agar key, value va tartib raqami birga kerak bo'lsa enumerate() bilan items() ni birga ishlatish mumkin:
| enumerate_dict.py | |
|---|---|
Natija:
Agar ikkita ro'yxatni birga aylanish va shu bilan birga raqam ham kerak bo'lsa enumerate() va zip() ni birga
ishlatish mumkin:
| enumerate_zip.py | |
|---|---|
Natija:
Qachon enumerate() ishlatmaslik kerak?
Agar sizga faqat element kerak bo'lsa, enumerate() shart emas.
Agar sizga qo'shni elementlar kerak bo'lsa masalan names[i] va names[i + 1], unda indeks bilan ishlash to'g'ri
bo'ladi.
enumerate() quyidagi holatlarda ishlatiladi:
- ro'yxatdagi element bilan birga tartib raqami kerak bo'lsa
- foydalanuvchiga raqamlangan ro'yxat chiqarish kerak bo'lsa
- fayl qatorlarini raqamlash kerak bo'lsa
- loop ichida
indexvavalueikkalasi ham kerak bo'lsa
enumerate() range(len(...)) ga qaraganda o'qilishi osonroq va maqsadni aniqroq ko'rsatadi. Agar loop ichida elementning o'zi ham,
raqami ham kerak bo'lsa, birinchi bo'lib enumerate() haqida o'ylagan yaxshi.
Foydalanilgan manbaalar
- Python documentation: Built-in Functions
- Python documentation: Data Structures
- The enumerate() built-in function