Python'da list comprehension
Ko’pincha bitta ro’yxatdan yangisini yasaymiz: har
elementni o’zgartirib yoki ba’zilarini tanlab. Buni oddiy
for sikli bilan qilsa bo’ladi, lekin Python’da
undan ancha ixcham yo’l bor — list comprehension.
Oddiy usul: for sikli
1 dan 5 gacha sonlar kvadratini ro’yxatga yig’amiz:
Uch qator: bo’sh ro’yxat, sikl, append. Bu keng tarqalgan naqsh — Python
uni bitta qatorga jamlashga imkon beradi.
List comprehension
Xuddi shu natija, bitta qatorda:
Uni o’ngdan chapga o’qing: “range(1, 6) dagi har x uchun x ** 2 ni ol”.
Tuzilishi:
[ifoda for element in ketma-ketlik]
for x in range(1, 6)— nimadan olishni bildiradi.x ** 2— har element bilan nima qilishni bildiradi.
Shart bilan filtrlash
Oxiriga if qo’shib, faqat kerakli elementlarni
tanlash mumkin. 0 dan 9 gacha faqat juft sonlar:
if x % 2 == 0 — shart: faqat unga mos elementlar ro’yxatga tushadi. Bu yerda
x o’zgartirilmayapti, faqat tanlanyapti.
O’zgartirish va filtrlashni birga
Ikkalasini birlashtirsa bo’ladi — juft sonlarning kvadratini olamiz:
Avval if filtrlaydi (juftlar), keyin x ** 2 o’zgartiradi (kvadrat).
Amaliy mashq
Sikldan comprehension’ga o’ting:
- 1 dan 20 gacha sonlar ro’yxatini oddiy
forbilan yarating; - xuddi shuni list comprehension bilan bir qatorda yozing;
- faqat juft sonlarni filtrlang;
- har sonning kvadratini oling;
- ikkalasini birlashtiring: faqat juft sonlarning kvadrati.
Ikki usulni yonma-yon qo’ying — qaysi biri o’qishga qulayroq va nega?
Qisqacha xulosa
- List comprehension — ro’yxatni bitta qatorda yasash:
[ifoda for x in ...]. forsikli +appendnaqshini qisqartiradi.- Oxiridagi
ifbilan elementlarni filtrlash mumkin. - O’zgartirish (
x ** 2) va filtrlash (if ...) ni birga ishlatsa bo’ladi. - Mantiq murakkablashsa — oddiy
forsikliga qayting.
Keyingi darsda dekorator — funksiya ustiga qo’shimcha xatti-harakat qo’shadigan kuchli vositani ko’ramiz.