it-swarm-pt.tech

Lista de zeros em python

Como posso criar um list que contenha apenas zeros? Eu quero ser capaz de criar um zeros list para cada int em range(10)

Por exemplo, se o int no intervalo for 4, recebo:

[0,0,0,0]

e para 7:

[0,0,0,0,0,0,0]
213
user1040563
#add code here to figure out the number of 0's you need, naming the variable n.
listofzeros = [0] * n

se você preferir colocá-lo na função, apenas coloque o código e adicione return listofzeros

Qual ficaria assim:

def zerolistmaker(n):
    listofzeros = [0] * n
    return listofzeros

amostra de saída:

>>> zerolistmaker(4)
[0, 0, 0, 0]
>>> zerolistmaker(5)
[0, 0, 0, 0, 0]
>>> zerolistmaker(15)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> 
362
Tiffany
$python 2.7.8

from timeit import timeit
import numpy

timeit("list(0 for i in xrange(0, 100000))", number=1000)
> 8.173301935195923

timeit("[0 for i in xrange(0, 100000)]", number=1000)
> 4.881675958633423

timeit("[0] * 100000", number=1000)
> 0.6624710559844971

timeit('list(itertools.repeat(0, 100000))', 'import itertools', number=1000)
> 1.0820629596710205

Você deve usar [0] * n para gerar uma lista com zeros n.

Veja porque [] é mais rápido que list ()

No entanto, há uma pegadinha, tanto itertools.repeat quanto [0] * n criarão listas cujos elementos se referem ao mesmo id. Este não é um problema com objetos imutáveis ​​como inteiros ou strings, mas se você tentar criar uma lista de objetos mutáveis ​​como uma lista de listas ([[]] * n) então todos os elementos se referirão ao mesmo objeto.

a = [[]] * 10
a[0].append(1)
a
> [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

[0] * n criará a lista imediatamente enquanto repeat pode ser usado para criar a lista preguiçosamente quando ela for acessada pela primeira vez.

Se você está lidando com uma grande quantidade de dados e seu problema não precisa de tamanho variável de lista ou vários tipos de dados dentro da lista, é melhor usar arrays numpy.

timeit('numpy.zeros(100000, numpy.int)', 'import numpy', number=1000)
> 0.057849884033203125

Arrays numpy também consomem menos memória.

48
Seppo Erviälä

A maneira mais fácil de criar uma lista na qual todos os valores são iguais é multiplicar uma lista de um elemento por n.

>>> [0] * 4
[0, 0, 0, 0]

Então, para o seu loop:

for i in range(10):
    print [0] * i
25
Andrew Clark
$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[0, 0, 0, 0, 0, 0, 0]
9
kev
zlists = [[0] * i for i in range(10)]

zlists[0] é uma lista de 0 zeros, zlists[1] é uma lista de 1 zero, zlists[2] é uma lista de 2 zeros, etc.

7
kindall

zeros=[0]*4

você pode substituir 4 no exemplo acima com o número que quiser.

4
Lelouch Lamperouge

Se você quiser uma função que retornará um número arbitrário de zeros em uma lista, tente isto:

def make_zeros(number):
    return [0] * number

list = make_zeros(10)

# list now contains: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4
Gavin Anderegg

Aqui está o caminho xrange:

list(0 for i in xrange(0,5)) 
1
bugfree