Lijst met nullen in python

Hoe kan ik een listmaken die alleen nullen bevat? Ik wil een listmet nullen kunnen maken voor elke intin range(10)

Als de intin het bereik bijvoorbeeld 4was, krijg ik:

[0,0,0,0]

en voor 7:

[0,0,0,0,0,0,0]

Antwoord 1, autoriteit 100%

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

als u het liever in de functie plaatst, hoeft u alleen maar die code in te voeren en return listofzeros

toe te voegen

Dat zou er als volgt uitzien:

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

voorbeelduitvoer:

>>> 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]
>>> 

Antwoord 2, autoriteit 13%

$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

U moet [0] * ngebruiken om een ​​lijst te genereren met nZEROS.

Zie Waarom [] sneller is dan lijst ()

Er is echter een GOTCHA, zowel itertools.repeaten [0] * nzal lijsten maken waarvan de elementen verwijzen naar dezelfde id. Dit is geen probleem met onveranderlijke objecten zoals gehele getallen of strings, maar als u een lijst met mutable objecten wilt maken zoals een lijst met lijsten ([[]] * n), verwijzen alle elementen naar de hetzelfde object.

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

[0] * nHiermee wordt de lijst onmiddellijk gemaakt terwijl repeatkan worden gebruikt om de lijst lui te maken wanneer deze voor het eerst is geopend.

Als u te maken hebt met een hele grote hoeveelheid gegevens en uw probleem geen variabele lengte van lijst of meerdere gegevenstypen in de lijst nodig heeft, is het beter om numpyarrays te gebruiken.

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

numpyARRAYS ZULLEN OOK MINDER GEHEUGEN.


Antwoord 3, Autoriteit 6%

De eenvoudigste manier om een ​​lijst te maken waar alle waarden hetzelfde zijn, vermenigvuldigt een lijst met één-element met n.

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

Dus voor uw lus:

for i in range(10):
    print [0] * i

Antwoord 4, Autoriteit 3%

$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[0, 0, 0, 0, 0, 0, 0]

Antwoord 5

zlists = [[0] * i for i in range(10)]

zlists[0]is een lijst van 0 nullen, zlists[1]is een lijst van 1 nul, zlists[2]is een lijst van 2 nullen, enz.


Antwoord 6

zeros=[0]*4

je kunt 4in het bovenstaande voorbeeld vervangen door welk nummer je maar wilt.


Antwoord 7

Als je een functie wilt die een willekeurig aantal nullen in een lijst teruggeeft, probeer dan dit:

def make_zeros(number):
    return [0] * number
list = make_zeros(10)
# list now contains: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Antwoord 8

Dit is de xrangemanier:

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

Other episodes