Python’s build-in function zip() බහු පුනරාවර්තන වස්තු වල (ලැයිස්තු, ටියුපල්, ආදිය) මූලද්රව්ය ඒකාබද්ධ කරන අතර for loop එකක ඇති බහු ලැයිස්තු වල මූලද්රව්ය නැවත ලබා ගැනීමට භාවිතා කරයි.
මෙම කොටස zip() ශ්රිතයේ පහත භාවිතය විස්තර කරයි.
- for loop එකක බහු ලැයිස්තු වල මූලද්රව්ය ලබා ගන්න.
- විවිධ මූලද්රව්ය සංඛ්යාව සමඟ කටයුතු කිරීම
zip()
:ශ්රිතය ඕනෑවට වඩා ඇති මූලද්රව්ය නොසලකා හරිනු ඇත.itertools.zip_longest()
:මෙම කාර්යය අතුරුදහන් වූ මූලද්රව්ය පුරවනු ඇත.
- බහු පුනරාවර්තන වල මූලද්රව්යවල ටියුපල් ලැයිස්තුවක් ලබා ගන්න.
for loop එකක බහු ලැයිස්තු වල මූලද්රව්ය ලබා ගන්න.
ඔබට for loop එකකින් එකවර නැවත නැවත කළ හැකි වස්තූන් (ලැයිස්තු, ටියුපල්, ආදිය) බහුවිධ වස්තූන්ගේ මූලද්රව්ය ලබා ගැනීමට සහ භාවිතා කිරීමට අවශ්ය නම්, ඒවා zip() ශ්රිතයට තර්ක ලෙස සඳහන් කරන්න.
names = ['Alice', 'Bob', 'Charlie'] ages = [24, 50, 18] for name, age in zip(names, ages): print(name, age) # Alice 24 # Bob 50 # Charlie 18
දෙකක් පමණක් නොව, තුනක් හෝ ඊට වැඩි ගණනක්.
points = [100, 85, 90] for name, age, point in zip(names, ages, points): print(name, age, point) # Alice 24 100 # Bob 50 85 # Charlie 18 90
විවිධ මූලද්රව්ය සංඛ්යාව සමඟ කටයුතු කිරීම
zip() ශ්රිතය මූලද්රව්ය විශාල සංඛ්යාවක් නොසලකා හරියි.
zip() ශ්රිතයේ, එක් එක් ලැයිස්තුවේ ඇති මූලද්රව්ය ගණන වෙනස් නම්, අඩු (කෙටි) මූලද්රව්ය සංඛ්යාව දක්වා ආපසු ලැබෙන අතර, වැඩි සංඛ්යාව නොසලකා හරිනු ලැබේ.
names = ['Alice', 'Bob', 'Charlie', 'Dave'] ages = [24, 50, 18] for name, age in zip(names, ages): print(name, age) # Alice 24 # Bob 50 # Charlie 18
itertools.zip_longest() ශ්රිතය අතුරුදහන් වූ මූලද්රව්ය පුරවනු ඇත.
සම්මත library itertools මොඩියුලයේ zip_longest() භාවිතා කරමින්, එක් එක් ලැයිස්තුවේ ඇති මූලද්රව්ය ගණන වෙනස් වන විට අස්ථානගත වූ මූලද්රව්ය අත්තනෝමතික අගයන් සමඟ පිරවීමට හැකිය.
පෙරනිමියෙන්, එය කිසිවක් පුරවා ඇත.
from itertools import zip_longest names = ['Alice', 'Bob', 'Charlie', 'Dave'] ages = [24, 50, 18] for name, age in zip_longest(names, ages): print(name, age) # Alice 24 # Bob 50 # Charlie 18 # Dave None
පිරවුම් අගය තර්කය නියම කර ඇත්නම්, එය එම අගයෙන් පුරවනු ලැබේ.
for name, age in zip_longest(names, ages, fillvalue=20): print(name, age) # Alice 24 # Bob 50 # Charlie 18 # Dave 20
අතුරුදහන් වූ මූලද්රව්ය සහිත ලැයිස්තු කිහිපයක් තිබුණද, පිරවිය යුතු අගය ඒකාකාර වේ. විවිධ අගයන් සඳහන් කළ නොහැක.
points = [100, 85] for name, age, point in zip_longest(names, ages, points, fillvalue=20): print(name, age, point) # Alice 24 100 # Bob 50 85 # Charlie 18 20 # Dave 20 20
zip_longest() ඇතුළත zip_longest() භාවිතා කිරීමෙන් වෙනස් අගයක් නියම කළ හැක, නමුත් ලැයිස්තුවේ අස්ථානගත වී ඇති මූලද්රව්ය ඔබ කල්තියා දැනගත යුතු නිසා එය ප්රායෝගික නොවේ.
ඔබට නොදන්නා මූලද්රව්ය සංඛ්යාවකින්, එක් එක් වෙනත් අගයකින් යුත් ලැයිස්තු කිහිපයක් පිරවීමට අවශ්ය නම්, පහත ක්රියා පටිපාටිය සලකා බැලිය හැක.
- සියලුම ලැයිස්තු සඳහා පිරවිය යුතු අගයන් නිර්වචනය කරන්න.
- උපරිම මූලද්රව්ය සංඛ්යාව ලබා ගන්න
- සියලුම ලැයිස්තු උපරිම මූලද්රව්ය ගණනට පුරවන්න
- zip() ශ්රිතය භාවිතා කිරීම
fill_name = 'XXX' fill_age = 20 fill_point = 50 len_names = len(names) len_ages = len(ages) len_points = len(points) max_len = max(len_names, len_ages, len_points) names = names + [fill_name] * (max_len - len_names) ages = ages + [fill_age] * (max_len - len_ages) points = points + [fill_point] * (max_len - len_points) print(names) print(ages) print(points) # ['Alice', 'Bob', 'Charlie', 'Dave'] # [24, 50, 18, 20] # [100, 85, 50, 50] for name, age, point in zip(names, ages, points): print(name, age, point) # Alice 24 100 # Bob 50 85 # Charlie 18 50 # Dave 20 50
මූලද්රව්ය විශාලතම සංඛ්යාව දක්වා පිරවීමේ ක්රියාවලියේදී, අපි පහත සඳහන් දේ කරන්නෙමු.
- අත්තනෝමතික අගයක් සහ මූලද්රව්ය සංඛ්යාවක් සහිත ලැයිස්තුවක් ආරම්භ කිරීම
- + ලැයිස්තු එකට එකතු කිරීමට ක්රියාකරු
අපි මේක Function එකක් බවට පත් කළොත් මේ වගේ. මුල් ලැයිස්තුව සහ ලැයිස්තුව පුරවන අගයන් පිළිවෙලින් පුනරාවර්තන (ලැයිස්තුව හෝ ටුපල්) තර්ක ලෙස දක්වා ඇත.
def my_zip_longest(iterables, fillvalues): max_len = max(len(i) for i in iterables) return zip(*[list(i) + [v] * (max_len - len(i)) for i, v in zip(iterables, fillvalues)]) for name, age, point in my_zip_longest((names, ages, points), ('XXX', 20, 50)): print(name, age, point) # Alice 24 100 # Bob 50 85 # Charlie 18 50 # Dave 20 50
එය * මගින් ලැයිස්තු අවබෝධතා අංකනය සහ ලැයිස්තු පුළුල් කිරීම භාවිතා කරයි.
බහු පුනරාවර්තන වල මූලද්රව්යවල ටියුපල් ලැයිස්තුවක් ලබා ගන්න.
zip() ශ්රිතය මඟින් පුනරාවර්තකයක් (zip වස්තුව) ලබා දෙයි, එය බහු පුනරාවර්තනය කළ හැකි වස්තු වල මූලද්රව්ය සමූහයකි.
එය for loop වලින් පිටත ද භාවිතා කළ හැකි අතර, ඉලක්කය ලැයිස්තු වලට සීමා නොවේ.
names = ['Alice', 'Bob', 'Charlie'] ages = (24, 50, 18) z = zip(names, ages) print(z) print(type(z)) # <zip object at 0x10b57b888> # <class 'zip'>
ඔබට පුනරාවර්තනය කළ හැකි බහුවිධ වස්තූන්හි මූලද්රව්ය ලැයිස්තුවක් ටියුපල් ලෙස ලබා ගැනීමට අවශ්ය නම්, ලැයිස්තුවක් සෑදීමට list() භාවිතා කරන්න.
l = list(zip(names, ages)) print(l) print(type(l)) print(type(l[0])) # [('Alice', 24), ('Bob', 50), ('Charlie', 18)] # <class 'list'> # <class 'tuple'>