Python: anexar item à lista N vezes

93

Isso parece algo para o qual Python teria um atalho. Quero anexar um item a uma lista N vezes, efetivamente fazendo o seguinte:

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

Parece-me que deveria haver um método "otimizado" para isso, algo como:

l.append_multiple(x, 100)

Existe?

Toji
fonte
9
Acabei indo com l.extend([x] * 100)uma vez que se encaixa melhor na minha situação. Amber recebe o crédito de resposta por ser a mais abrangente. Obrigado!
Toji
4
Certifique-se de entender a semântica de referência do Python antes de usar isso para qualquer coisa não trivial. Os x's anexados a l são todos iguais, então a mutação de um deles afeta todos eles (todos um deles, referido 100 vezes).
Karl Knechtel
1
Para esclarecimento: estou usando-o para números inteiros, portanto, meu uso é seguro.
Toji

Respostas:

136

Para tipos de dados imutáveis:

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

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

Para valores que são armazenados por referência e você pode desejar modificar mais tarde (como sublistas ou dictos):

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

(A razão pela qual o primeiro método é apenas uma boa ideia para valores constantes, como ints ou strings, é porque apenas uma cópia superficial é feita ao usar a <list>*<number>sintaxe e, portanto, se você fizer algo como [{}]*100, você acabará com 100 referências para o mesmo dicionário - portanto, mudar um deles mudaria todos eles. Visto que ints e strings são imutáveis, isso não é um problema para eles.)

Se você deseja adicionar a uma lista existente, você pode usar o extend()método dessa lista (em conjunto com a geração de uma lista de itens a serem adicionados por meio das técnicas acima):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]
Âmbar
fonte
2
Ou combine as duas sugestões na forma de a.extend(b*n)onde nestão os horários em que você deseja repetir os elementos em b
DarkCygnus
26

Use extend para adicionar uma lista de compreensão ao final.

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

Veja a documentação do Python para mais informações.

Jake
fonte
6

Repetição de itertools combinada com extensão de lista.

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

Eu tive que ir por outro caminho para uma atribuição, mas foi assim que acabei.

my_array += ([x] * repeated_times)
CTS_AE
fonte
3

Você poderia fazer isso com uma compreensão de lista

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