J'ai une liste de taille < N et je veux la compléter à la taille N avec une valeur.
Certes, je peux utiliser quelque chose comme ce qui suit, mais je pense qu'il devrait y avoir quelque chose que j'ai manqué:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
python
list
list-manipulation
Newtover
la source
la source
Réponses:
ou si vous ne voulez pas changer
a
de placevous pouvez toujours créer une sous-classe de liste et appeler la méthode comme bon vous semble
la source
Je pense que cette approche est plus visuelle et pythonique.
la source
N < len(a)
. C'est le cas de la deuxième réponse que vous avez fournie.Il n'y a pas de fonction intégrée pour cela. Mais vous pouvez composer les éléments intégrés pour votre tâche (ou quoi que ce soit: p).
(Modifié à partir d'itertool
padnone
et detake
recettes)Usage:
la source
La réponse de gnibbler est plus agréable, mais si vous avez besoin d'un intégré, vous pouvez utiliser
itertools.izip_longest
(zip_longest
dans Py3k):qui renverra une liste de tuples
( i, list[ i ] )
remplis à Aucun. Si vous devez vous débarrasser du compteur, faites quelque chose comme:la source
operator.itemgetter()
. LesNone
valeurs devaient également être remplacées par""
.Vous pouvez également utiliser un générateur simple sans build ins. Mais je ne remplirais pas la liste, mais laisserais la logique de l'application traiter une liste vide.
Quoi qu'il en soit, itérateur sans buildins
la source
Si vous voulez remplir avec None au lieu de '', map () fait le travail:
la source
more-itertools
est une bibliothèque qui inclut unpadded
outil spécial pour ce genre de problème:Sinon,
more_itertools
implémente également les recettes Python itertools, y comprispadnone
ettake
comme mentionné par @kennytm, afin qu'elles n'aient pas à être réimplémentées:Si vous souhaitez remplacer le
None
remplissage par défaut , utilisez une compréhension de liste:la source
Pour sortir du kennytm:
la source
vous pouvez utiliser l'
*
opérateur de déballage itérable :production:
la source
Cela évite toute allocation supplémentaire, contrairement à toute solution qui dépend de la création et de l'ajout de la liste
[value] * extra_length
. La méthode "extend" appelle d'abord__length_hint__
l'itérateur, et étend l'allocation pourl
autant avant de la remplir à partir de l'itérateur.la source