Cela ressemble à quelque chose que Python aurait un raccourci pour. Je souhaite ajouter un élément à une liste N fois, en procédant ainsi:
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 comme:
l.append_multiple(x, 100)
Y a-t-il?
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 voudrez peut-être modifier ultérieurement (telles que des sous-listes ou des dict):
l = [{} for x in range(100)]
(La raison pour laquelle la première méthode est seulement une bonne idée pour les valeurs constantes, comme les ints ou les chaînes, est que seule la copie superficielle est utilisée lorsque la syntaxe <list>*<number>
est utilisée. Ainsi, si vous utilisiez quelque chose comme [{}]*100
, vous obtiendriez 100 références au même dictionnaire - changer si l’un d’eux changerait tout le monde. Comme les ints et les chaînes de caractères sont immuables, cela ne leur pose aucun problème.)
Si vous souhaitez ajouter des éléments à une liste existante, vous pouvez utiliser la méthode extend()
de cette liste (en association avec la génération d'une liste d'éléments à 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]
Utilisez extend pour ajouter une liste de compréhension à la fin.
l.extend([x for i in range(100)])
Voir le docs Python pour plus d'informations.
La répétition d'Itertools combinée avec l'extension de liste.
from itertools import repeat
l = []
l.extend(repeat(x, 100))
Vous pouvez le faire avec une compréhension de liste
l = [x for i in range(10)];
Je devais emprunter un autre chemin pour une mission, mais c’est ce avec quoi je me suis retrouvé.
my_array += ([x] * repeated_times)