Python: ajouter l'élément à la liste N fois

91

Cela semble être quelque chose pour lequel Python aurait un raccourci. Je souhaite ajouter un élément à une liste N fois, ce qui en fait:

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?

Toji
la source
9
J'ai fini par y aller l.extend([x] * 100)car cela correspondait le mieux à ma situation. Amber obtient le crédit de réponse pour être la plus complète. Merci!
Toji
4
Assurez-vous de comprendre la sémantique de référence de Python avant de l'utiliser pour tout ce qui n'est pas trivial. Les x ajoutés à l sont tous les mêmes x, donc la mutation de l'un d'eux les affecte tous (tous l'un d'eux, référencé 100 fois).
Karl Knechtel
1
Pour clarification: je l'utilise pour les entiers, donc mon utilisation est sûre.
Toji

Réponses:

132

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 stockées par référence et que vous souhaiterez peut-être modifier ultérieurement (comme les sous-listes ou les dictionnaires):

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 entiers ou les chaînes, est que seule une copie superficielle est utilisée lors de l'utilisation de la <list>*<number>syntaxe, et donc si vous faisiez quelque chose comme [{}]*100, vous vous retrouveriez avec 100 références dans le même dictionnaire - donc changer l'un d'entre eux les changerait tous. Puisque les entiers et les chaînes sont immuables, ce n'est pas un problème pour eux.)

Si vous souhaitez ajouter à une liste existante, vous pouvez utiliser la extend()méthode 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]
ambre
la source
1
Ou combinez les deux suggestions sous la forme a.extend(b*n)nsont les heures
auxquelles
26

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

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

Consultez la documentation Python pour plus d'informations.

Jake
la source
6

J'ai dû emprunter une autre voie pour une mission, mais c'est ce avec quoi j'ai fini.

my_array += ([x] * repeated_times)
CTS_AE
la source
5

Répéter Itertools combiné avec l'extension de liste.

from itertools import repeat
l = []
l.extend(repeat(x, 100))
kevpie
la source
3

Vous pouvez le faire avec une compréhension de liste

l = [x for i in range(10)];
Mark Elliot
la source
0
l = []
x = 0
l.extend([x]*100)
Rajan saha Raju
la source