Hoe kan ik een list
maken die alleen nullen bevat? Ik wil een list
met nullen kunnen maken voor elke int
in range(10)
Als de int
in het bereik bijvoorbeeld 4
was, 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] * n
gebruiken om een lijst te genereren met n
ZEROS.
Zie Waarom [] sneller is dan lijst ()
Er is echter een GOTCHA, zowel itertools.repeat
en [0] * n
zal 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] * n
Hiermee wordt de lijst onmiddellijk gemaakt terwijl repeat
kan 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 numpy
arrays te gebruiken.
timeit('numpy.zeros(100000, numpy.int)', 'import numpy', number=1000)
> 0.057849884033203125
numpy
ARRAYS 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 4
in 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))