Maison >développement back-end >Tutoriel Python >Comment puis-je étendre la fonction zip() de Python pour gérer les itérables de longueurs inégales ?
Extension de la fonctionnalité zip() : remplissage jusqu'à la longueur la plus longue
La fonction zip() intégrée de Python associe des éléments de plusieurs itérables, mais elle tronque le résultat à la longueur de l'itérable le plus court. Si vous avez besoin d'un zip plus complet qui remplit les valeurs None pour s'aligner sur l'entrée la plus longue, envisagez les solutions suivantes :
Python 3 : itertools.zip_longest
En Python 3, itertools fournit la fonction zip_longest(). Il étend la liste des résultats pour qu'elle corresponde à la longueur de l'entrée la plus longue.
import itertools a = ['a1'] b = ['b1', 'b2', 'b3'] c = ['c1', 'c2'] list(itertools.zip_longest(a, b, c)) # [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
Vous pouvez spécifier une valeur de remplissage personnalisée à l'aide du paramètre fillvalue :
list(itertools.zip_longest(a, b, c, fillvalue='foo')) # [('a1', 'b1', 'c1'), ('foo', 'b2', 'c2'), ('foo', 'b3', 'foo')]
Python 2 : itertools.izip_longest ou map Aucun
Dans Python 2, vous pouvez utiliser itertools.izip_longest (introduit dans Python 2.6) ou utilisez map avec None.
from itertools import izip_longest a = ['a1'] b = ['b1', 'b2', 'b3'] c = ['c1', 'c2'] list(izip_longest(a, b, c)) # [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)] map(None, a, b, c) # [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!