135 votes

Python : Ajouter un élément à une liste N fois

Cela semble être quelque chose pour lequel Python aurait un raccourci. Je veux ajouter un élément à une liste N fois, en faisant effectivement ceci :

l = []
x = 0
for i in range(100):
    l.append(x)

Il me semble qu'il devrait y avoir une méthode "optimisée" pour cela, quelque chose du genre :

l.append_multiple(x, 100)

C'est le cas ?

12 votes

J'ai fini par choisir l.extend([x] * 100) car il correspondait le mieux à ma situation. C'est à Amber que revient le mérite de la réponse la plus complète. Merci !

6 votes

Assurez-vous de bien comprendre la sémantique de référence de Python avant de l'utiliser pour quelque chose de non trivial. Les x ajoutés à l sont tous le même x, donc la mutation de l'un d'entre eux les affecte tous (tous les un, référencés 100 fois).

1 votes

Pour une clarification : Je l'utilise pour les entiers, donc mon utilisation est sûre.

189voto

Amber Points 159296

Pour les types de données immuables :

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

Pour les valeurs qui sont stockées par référence et que vous pouvez souhaiter modifier ultérieurement (comme les sous-listes ou les dicts) :

l = [{} for x in range(100)]

(La raison pour laquelle la première méthode n'est une bonne idée que pour les valeurs constantes, comme les ints ou les chaînes de caractères, est que seule une copie superficielle est effectuée lors de l'utilisation de la balise <list>*<number> syntaxe, et donc si vous avez fait quelque chose comme [{}]*100 vous vous retrouveriez avec 100 références au même dictionnaire, et la modification de l'une d'entre elles les modifierait toutes. Comme les ints et les chaînes de caractères sont immuables, ce n'est pas un problème pour eux).

Si vous souhaitez ajouter des éléments à une liste existante, vous pouvez utiliser la commande extend() de cette liste (en conjonction avec la génération d'une liste de choses à ajouter via les techniques ci-dessus) :

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

41voto

Jake Points 2460

Utilisez extend pour ajouter une liste de compréhension à la fin.

l.extend([x for i in range(100)])

Ver el Documentation Python pour plus d'informations.

13voto

kevpie Points 5243

Itertools repeat combiné à list extend.

from itertools import repeat
l = []
l.extend(repeat(x, 100))

11voto

CTS_AE Points 1927

J'ai dû prendre un autre chemin pour un travail, mais c'est ce que j'ai obtenu.

my_array += ([x] * repeated_times)

7voto

Rajan saha Raju Points 116
l = []
x = 0
l.extend([x]*100)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X