Tuesday, April 13, 2021

பைத்தானில் ஃபில்டெர், மேப், ரெடுயூஸ்(Filter, Map, Reduce)

 


 

கீழே உள்ள ஃபங்க்சனை எடுத்துக் கொள்வோம்.

நிரல்-1

def square(n):

    return n*n

num=square(5)

print(num)

வெளியீடு:

25

விளக்கம்:

மேலே உள்ள நிரலில் square என்று ஒரு ஃபங்க்சன் உள்ளது. இது அதற்கு கடத்தப்படும் எண்ணின் ஸ்கொயர் மதிப்பை ரிடர்ன் செய்கின்றது.

இந்த ஃபங்க்சன் ஒரே ஒரு வரியைக் கொண்டுள்ளது. மேலும் இது ஒரு முறை தான் அழைக்கப்படுகின்றது.

இவ்வாறு உள்ள ஃபங்க்சனை அனானிமஸ் ஃபங்க்சனாக எழுதிக் கொள்ளலாம்.

நிரல்:2

f=lambda n :  n*n

num=f(5)

print(num)

வெளீயீடு:

25

மேலே உள்ள நிரலில்

F=lambda n : n*n

என்பது ஒரு அனானிமஸ் ஃபங்க்சனாகும். இந்து பெயரிடதப் படும் ஃபங்க்சன் ஆகும் . இது லாம்ப்டா ஃபங்க்சன் ஆகும். இதை lambda என்ற கீ வேர்டு குறிக்கின்றது. n என்பது கடத்தப்படும் மதிப்பாகும். n*n என்பதன் மதிப்பை ரிடர்ன் செய்கின்றது.

இதற்கு எத்தனை பாராமீட்டர்களையும் அனுப்பலாம்.

மேலும் சில லாம்ப்டா ஃபங்க்சனின் சான்றுகள்:

நிரல்-3

x = lambda a : a + 10
print(x(5))

வெளியீடு:

15.

நிரல்-4

x = lambda a, b : a * b
print(x(5, 6))

வெளியீடு:

30.

ஃபில்டர்(Filter).

ஃபில்டர் ஃபங்க்சன் ஆனது ஒரு லிஸ்டில் இருந்து குறிப்பிட்ட மதிப்புகளை மட்டும் பிரித்தெடுப்பதாகும்.

நிரல்-5:

def is_even(n):

    return n%2==0

 

nums=[3,4,6,5,7,8, 9]

evens=list(filter(is_even,nums))

print(evens)

வெளியீடு:

[4, 6, 8]

மேலே உள்ள ஃபங்க்சனில்  nums என்ற லிஸ்டில் இருந்து இரட்டை எண்களை மட்டும் பிரித்து evens என்ற லிஸ்டில் சேவ் செய்கின்றோம்.

இதில் ஃபில்டர் ஃபங்க்சனுக்கு இரண்டு பாராமீட்டர்கள் அனுப்பப்படுகின்றது. ஒன்று is_even என்றொரு ஃபங்க்சன்  , மற்றொன்று nums என்ற லிஸ்ட் ஆகும்.

ஆம் பைத்தானில் ஃபங்க்சனை மற்றொரு ஃபங்க்சனுக்கு பாஸ் செய்யலாம். பைத்தானில் ஃபங்க்சனும் ஒரு ஆப்ஜெக்ட் தான்.

is_even ஃபங்க்சன் ஆனது இரட்டை எண் எனில் true என்ற பூலியன் மதிப்பை ரிடர்ன் செய்கின்றது.

இந்த ஃபங்க்சன் ஆனது ஒரே ஒரு வரியைக் கொண்டுள்ளது. மேலும் ஒரு முறை தான் அழைக்கப்படுகின்றது.

இதை லாம்ப்டா ஃபங்க்சன் ஆக எழுதலாம்.

நிரல்-6:

nums=[3,4,6,5,7,8, 9]

evens=list(filter(lambda n: n%2==0,nums))

print(evens)

வெளியீடு:

[4, 6, 8]

இதில்  is_even ஃபங்க்சன் ஆனது லாம்ப்டா ஃபங்க்சன் ஆக நேரடியாக எழுதப்பட்டுள்ளது.

மேப்(Map).

இது ஒரு லிஸ்டின் மீது கணக்கீடுகளை கையாளப்ப பயன்டுகின்றது. உதாரணத்திற்கு ஒரு லிஸ்டில் உள்ள மதிப்புகளை இரட்டிப்பாப்பதற்கு சான்று நிரலைப் பார்ப்போம்.

நிரல்-7

def update(n):

    return n*2

nums=[3,4,6,5,7,8, 9]

evens=list(filter(lambda n: n%2==0,nums))

doubles=list(map(update,evens))

print(evens)

print(doubles)

வெளியீடு:

[4, 6, 8]

[8, 12, 16]

இதில் update ஃபங்க்சன் ஆனது அதற்கு அனுப்பபடும் லிஸ்டில் உள்ள மதிப்புகளை இரட்டை மடங்காக ரிடர்ன் செய்கின்றது.

நிரல்-8

nums=[3,4,6,5,7,8, 9]

evens=list(filter(lambda n: n%2==0,nums))

doubles=list(map(lambda n: n*2,evens))

print(evens)

print(doubles)

வெளியீடு:

[4, 6, 8]

[8, 12, 16]

இதில் update ஃபங்க்சன் ஆனது லாம்ப்டா ஃபங்க்சன் ஆக எழுதப்பட்டுள்ளது.

ரெட்யூஸ்(Reduce)

இது ஒரு லிஸ்டை ஒற்றை மதிப்பாத்தல் ஆகும். அதாவது ஒரு லிஸ்டில் உள்ள எல்லா மதிப்புகளின் கூட்டுத் தொகையோ அல்லது பெருக்கப் தொகையோ ஆக ரெட்யூஸ் செய்வதற்கு பயன்படுகின்றது.

இதை நேரடியாக எழுத முடியாது.functool என்ற லைப்ரரியில் இருந்து இம்போர்ட் செய்தல்ல் வேண்டும்.

நிரல்-9:

from functools import reduce

def add_all(a,b):

    return a+b

nums=[3,4,6,5,7,8, 9]

evens=list(filter(lambda n: n%2==0,nums))

doubles=list(map(lambda n: n*2,evens))

print(evens)

print(doubles)

sum=reduce(add_all,doubles)

print(sum)

வெளியீடு:

[4, 6, 8]

[8, 12, 16]

36

விளக்கம்:

மேலே உள்ள நிரலில் மேப் ஃபங்க்சனுக்கு add_all, doubles என்று இரண்டு பாராமீட்டர்கள் அனுப்பபடுகின்றது.

add_all ஃபங்க்சன் ஆனது அந்த லிஸ்டின் மொத்த கூட்டல் தொகையை ரிடர்ன் செய்கின்றது. இதை லாம்ப்டா ஃபங்க்சன் ஆக எவ்வாறு எழுதலாம் என பார்ப்போம்.

நிரல்-10:

from functools import reduce

 

nums=[3,4,6,5,7,8, 9]

evens=list(filter(lambda n: n%2==0,nums))

doubles=list(map(lambda n: n*2,evens))

print(evens)

print(doubles)

sum=reduce(lambda a,b:a+b,doubles)

print(sum)

வெளியீடு:

[4, 6, 8]

[8, 12, 16]

36

நன்றி.

முத்து கார்த்திகேயன்,மதுரை

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ads Udanz