Het zou niet zo moeilijk moeten zijn. Ik bedoel in C,
int a[10];
is alles wat je nodig hebt. Hoe maak je een array van allemaal nullen voor een willekeurige grootte. Ik ken de functie nullen() in NumPy, maar er moet een gemakkelijke manier ingebouwd zijn, geen andere module.
Antwoord 1, autoriteit 100%
Als u niet tevreden bent met lijsten (omdat ze van alles kunnen bevatten en te veel geheugen in beslag nemen), kunt u een efficiënte reeks gehele getallen gebruiken:
import array
array.array('i')
Zie hier
Als je het moet initialiseren,
a = array.array('i',(0 for i in range(0,10)))
Antwoord 2, autoriteit 91%
twee manieren:
x = [0] * 10
x = [0 for i in xrange(10)]
Bewerken: range
vervangen door xrange
om te voorkomen dat er nog een lijst moet worden gemaakt.
Ook: zoals vele anderen hebben opgemerkt, waaronder Pi en Ben James, creëert dit een list
, geen Python-array. Hoewel een lijst in veel gevallen voldoende en gemakkelijk genoeg is, kunt u voor prestatiekritieke toepassingen (bijvoorbeeld wanneer ze worden gedupliceerd in duizenden objecten) in python-arrays kijken. Zoek de module array
op, zoals uitgelegd in de andere antwoorden in deze thread.
Antwoord 3, autoriteit 29%
>>> a = [0] * 10
>>> a
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4, Autoriteit 6%
a = 10 * [0]
geeft u een scala aan lengte 10, gevuld met nullen.
5, Autoriteit 3%
import random
def random_zeroes(max_size):
"Create a list of zeros for a random size (up to max_size)."
a = []
for i in xrange(random.randrange(max_size)):
a += [0]
Gebruik range
in plaats als u gebruik maakt Python 3.x.
6, Autoriteit 3%
Als u een array snel initialiseren, kunt u dit doen door blokken in plaats van met een generator initialiseerder, en het gaat veel sneller. Het creëren van een lijst met [0]*count
is net zo snel, nog steeds.
import array
def zerofill(arr, count):
count *= arr.itemsize
blocksize = 1024
blocks, rest = divmod(count, blocksize)
for _ in xrange(blocks):
arr.fromstring("\x00"*blocksize)
arr.fromstring("\x00"*rest)
def test_zerofill(count):
iarr = array.array('i')
zerofill(iarr, count)
assert len(iarr) == count
def test_generator(count):
iarr = array.array('i', (0 for _ in xrange(count)))
assert len(iarr) == count
def test_list(count):
L = [0]*count
assert len(L) == count
if __name__ == '__main__':
import timeit
c = 100000
n = 10
print timeit.Timer("test(c)", "from __main__ import c, test_zerofill as test").repeat(number=n)
print timeit.Timer("test(c)", "from __main__ import c, test_generator as test").repeat(number=n)
print timeit.Timer("test(c)", "from __main__ import c, test_list as test").repeat(number=n)
Resultaten:
(array in blocks) [0.022809982299804688, 0.014942169189453125, 0.014089107513427734]
(array with generator) [1.1884641647338867, 1.1728270053863525, 1.1622772216796875]
(list) [0.023866891860961914, 0.035660028457641602, 0.023386955261230469]
7, Autoriteit 3%
import numpy as np
new_array=np.linspace(0,10,11).astype('int')
Een alternatief voor het gieten van het type wanneer de array is gemaakt.