Funksioni i integruar zip() i Python kombinon elementet e objekteve të shumëfishta të përsëritur (lista, tuples, etj.) dhe përdoret për të rimarrë elementet e listave të shumta në një cikli for.
Ky seksion përshkruan përdorimin e mëposhtëm të funksionit zip().
- Merrni elementet e listave të shumta në një cikli for.
- Ballafaqimi me numër të ndryshëm elementësh
zip()
:Funksioni do të injorojë elementët që janë shumë.itertools.zip_longest()
:Ky funksion do të plotësojë elementet që mungojnë.
- Merrni një listë me tuple elementësh të përsëritësve të shumtë.
Merrni elementet e listave të shumta në një cikli for.
Nëse dëshironi të rikuperoni dhe përdorni elementet e shumë objekteve të përsëritur (lista, tuples, etj.) në të njëjtën kohë në një cikli for, specifikoni ato si argumente për funksionin 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
Jo vetëm dy, por edhe tre ose më shumë.
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
Ballafaqimi me numër të ndryshëm elementësh
Funksioni zip() injoron një numër të madh elementësh.
Në funksionin zip(), nëse numri i elementeve në secilën listë është i ndryshëm, deri në numrin më të vogël (më të shkurtër) të elementeve do të kthehen, dhe numri më i madh do të injorohet.
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
Funksioni itertools.zip_longest() do të plotësojë elementet që mungojnë.
Duke përdorur zip_longest() në modulin standard itertools të bibliotekës, është e mundur të plotësohen elementët që mungojnë me vlera arbitrare kur numri i elementeve në secilën listë është i ndryshëm.
Si parazgjedhje, ajo është e mbushur me Asnjë.
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
Nëse argumenti fillvalue është specifikuar, ai do të plotësohet me atë vlerë.
for name, age in zip_longest(names, ages, fillvalue=20): print(name, age) # Alice 24 # Bob 50 # Charlie 18 # Dave 20
Edhe nëse ka shumë lista me elementë që mungojnë, vlera që duhet të plotësohet është uniforme. Nuk është e mundur të specifikohen vlera të ndryshme.
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
Është e mundur të specifikoni një vlerë të ndryshme duke përdorur zip_longest() brenda zip_longest(), por nuk është praktike sepse duhet të dini paraprakisht se cilët elementë të listës mungojnë.
Nëse dëshironi të plotësoni lista të shumta me një numër të panjohur elementësh, secila me një vlerë të ndryshme, mund të merret parasysh procedura e mëposhtme.
- Përcaktoni vlerat për të plotësuar për të gjitha listat.
- Merrni numrin maksimal të elementeve
- Plotësoni të gjitha listat me numrin maksimal të elementeve
- Duke përdorur funksionin 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
Në procesin e mbushjes deri në numrin më të madh të elementeve, ne bëjmë sa më poshtë.
- Inicializimi i një liste me një vlerë arbitrare dhe numër elementësh
- + operator për të bashkuar listat së bashku
Nëse e kthejmë këtë në një funksion, duket kështu. Lista origjinale dhe vlerat që plotësojnë listën përcaktohen përkatësisht si argumente iterable (listë ose 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
Ai përdor shënimin e kuptimit të listës dhe zgjerimin e listës me *.
- Artikuj të ngjashëm:Duke përdorur shënimin e kuptimit të listës Python
Merrni një listë me tuple elementësh të përsëritësve të shumtë.
Funksioni zip() kthen një përsëritës (objekt zip) që është një tufë elementesh të objekteve të shumëfishta përsëritëse.
Mund të përdoret gjithashtu jashtë ciklit for, dhe objektivi nuk kufizohet në lista.
names = ['Alice', 'Bob', 'Charlie'] ages = (24, 50, 18) z = zip(names, ages) print(z) print(type(z)) # <zip object at 0x10b57b888> # <class 'zip'>
Nëse dëshironi të merrni një listë të elementeve të objekteve të shumëfishta përsëritëse si një tuple, përdorni list() për të krijuar një 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'>