filter() FUNKSIYASI
Bu funksiya ham argument sifatida ro'yxat va boshqa funskiyani qabul qilib oladi va berilgan ro'yxat elementlarini berilgan funksiya yordamida saralaydi. Bunda argument sifatida uzatilgan funksiya mantiqiy qiymat qaytarishi kerak (True yoki False).
Keling bunga ham bir misol ko'ramiz: tasodifiy sonlar ro'yxatidan juft sonalrni ajratib oluvchi dastur yozamiz. Dasturimiz 3 qismdan iborat:
1.
Avvalo, random modulidagi sample() funksiyasi yordamida 0-99 oralig'idagi 10 ta tasodifiy sonlar ro'yxatini tuzib oldik
2.
Berilgan son juft (True) yoki juft emas (False) ekanligini qaytaruvchi funksiya yozdik
3.
filter() fuksiyasiga yangi yaratgan juftmi funksiyasi va tasodifiy sonlar ro'yxatini uzatib, yangi juft_sonlar ro'yxatini shakllantridik
1
import random as r
2
3
sonlar = r.sample(range(100),10) # 0-99 oralig'ida 10 ta tasodifiy sonlar
4
5
def juftmi(x):
6
"""x juft bo'lsa True, aks holda False qaytaruvchu funksiya"""
7
return x%2==0
8
9
juft_sonlar = list(filter(juftmi,sonlar))
10
print(sonlar)
11
print(juft_sonlar)
Copied!
Natija
Keling endi shu dasturni lambda yordamida yozamiz:
1
import random as r
2
3
sonlar = r.sample(range(100),10) # 0-99 oralig'ida 10 ta tasodifiy sonlar
4
juft_sonlar = list(filter(lambda son: son%2==0,sonlar))
5
6
print(sonlar)
7
print(juft_sonlar)
Copied!
Natija
Kurib turganingizdek, lambda funksiya yordamida dastur bir muncha qisqaroq chiqadi. Agar juftmi funksiyasi kelajakda shart bo'lmasa, alohida funksiya yaratib o'tirmasdan, bir marttalik lambda funksiyasidan foydalangan afzal.
Keling endi filter() funksiyasi yordamida matnlarni saralashga ham misollar ko'raylik.
Quyidagi dastur mevalar ro'yxatidan b harfiga boshlanuvchi mevalarni ajratib oladi. Bu yerda biz matnlarga tegishli bo'lgan .startswith() metodidan foydalandik. Bu metod, berilgan matn shu harfdan boshlanadimi yoki yo'q tekshiradi va True yoki False qiymat qaytaradi.
1
mevalar = ['olma','anor','anjir','shaftoli',"o'rik","tarvuz","qovun","banan"]
2
3
mevalar_b = list(filter(lambda meva:meva.startswith('b'),mevalar))
4
print(mevalar_b)
Copied!
Quyidagi dastur esa mevalar ro'yxatidan nomi 5 yoki undan kam harfdan iborat mevalarni saralab oladi.
1
mevalar2 = list(filter(lambda meva:len(meva)<=5, mevalar))
2
print(mevalar2)
Copied!
Natija: ['olma', 'anor', 'anjir', "o'rik", 'qovun', 'banan']
Topingchi, quyidagi kod qanday vazifani bajaradi?
1
list(filter(lambda meva:(meva.startswith('a') and meva.endswith('r')), mevalar))
Copied!
SO'NGSO'Z
Ushbu darsimiz bilan biz dasturlash asoslarining katta bir qismiga yakun yasadik, navbat Object Oriented Programming va boshqa katta mavzularga. Lekin, bu mavzularga o'tishdan avval, keyingi darslarimizni bir nechta sodda loyihalar qilishga bag'ishlaymiz.
E'tiboringiz uchun rahmat!
Do'stlaringiz bilan baham: |