មុខងារ zip() ភ្ជាប់មកជាមួយរបស់ Python រួមបញ្ចូលគ្នានូវធាតុនៃវត្ថុដែលអាចផ្លាស់ប្តូរបានច្រើន (បញ្ជី, tuples ។ល។) ហើយត្រូវបានប្រើដើម្បីទាញយកធាតុនៃបញ្ជីច្រើននៅក្នុងរង្វិលជុំ។
ផ្នែកនេះពិពណ៌នាអំពីការប្រើប្រាស់មុខងារ zip() ខាងក្រោម។
- ទទួលបានធាតុនៃបញ្ជីច្រើននៅក្នុងសម្រាប់រង្វិលជុំ។
- ដោះស្រាយជាមួយនឹងចំនួនផ្សេងគ្នានៃធាតុ
zip()
:មុខងារនឹងមិនអើពើធាតុដែលមានច្រើនពេក។itertools.zip_longest()
:មុខងារនេះនឹងបំពេញធាតុដែលបាត់។
- ទទួលបានបញ្ជីនៃ tuples នៃធាតុនៃ iteables ច្រើន។
ទទួលបានធាតុនៃបញ្ជីច្រើននៅក្នុងសម្រាប់រង្វិលជុំ។
ប្រសិនបើអ្នកចង់ទាញយក និងប្រើធាតុនៃវត្ថុដែលអាចធ្វើឡើងវិញបានច្រើន (បញ្ជី, tuples ។ល។) ក្នុងពេលដំណាលគ្នាក្នុងរង្វិលជុំ សូមបញ្ជាក់ពួកវាជាអាគុយម៉ង់ទៅអនុគមន៍ 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() នឹងបំពេញនៅក្នុងធាតុដែលបាត់។
ដោយប្រើ zip_longest() នៅក្នុងម៉ូឌុល itertools បណ្ណាល័យស្តង់ដារ វាគឺអាចធ្វើទៅបានដើម្បីបំពេញធាតុដែលបាត់ជាមួយនឹងតម្លៃបំពាននៅពេលដែលចំនួនធាតុនៅក្នុងបញ្ជីនីមួយៗខុសគ្នា។
តាមលំនាំដើម វាត្រូវបានបំពេញដោយ គ្មាន។
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
នៅក្នុងដំណើរការនៃការបំពេញរហូតដល់ចំនួនច្រើនបំផុតនៃធាតុយើងធ្វើដូចខាងក្រោម។
- ការចាប់ផ្តើមបញ្ជីជាមួយនឹងតម្លៃបំពាន និងចំនួនធាតុ
- + ប្រតិបត្តិករដើម្បីចូលរួមបញ្ជីជាមួយគ្នា
ប្រសិនបើយើងប្រែក្លាយវាទៅជាមុខងារ វាមើលទៅដូចនេះ។ បញ្ជីដើម និងតម្លៃដែលបំពេញបញ្ជីត្រូវបានបញ្ជាក់ជាអាគុយម៉ង់ដែលអាចធ្វើបាន (បញ្ជី ឬ tuple) រៀងគ្នា។
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
វាប្រើការសម្គាល់ការយល់បញ្ជី និងការពង្រីកបញ្ជីដោយ * ។
- អត្ថបទដែលទាក់ទង:ការប្រើសញ្ញាសម្គាល់ការយល់បញ្ជី Python
ទទួលបានបញ្ជីនៃ tuples នៃធាតុនៃ iteables ច្រើន។
អនុគមន៍ zip() ត្រឡប់វត្ថុ iterator (zip object) ដែលជាដុំនៃធាតុនៃវត្ថុដែលអាចប្រើវាបានច្រើន។
វាក៏អាចត្រូវបានប្រើនៅខាងក្រៅ 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'>
ប្រសិនបើអ្នកចង់ទទួលបានបញ្ជីនៃវត្ថុដែលអាចប្រើវាបានច្រើនជា tuple សូមប្រើ 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'>