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 ?

Comment puis-je étendre la fonction zip() de Python pour gérer les itérables de longueurs inégales ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-27 17:56:13418parcourir

How Can I Extend Python's zip() Function to Handle Iterables of Unequal Lengths?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn