Ik probeer een histogram van tellingen te maken… dus ik maak buckets.
Ik weet dat ik er gewoon doorheen kan gaan en een aantal nullen kan toevoegen, bijvoorbeeld iets in de trant van:
buckets = []
for i in xrange(0,100):
buckets.append(0)
Is er een elegantere manier om dit te doen? Ik heb het gevoel dat er een manier moet zijn om een array van een bepaalde grootte te declareren.
Ik weet dat numpy numpy.zeros
heeft, maar ik wil de meer algemene oplossing
Antwoord 1, autoriteit 100%
buckets = [0] * 100
Voorzichtig – deze techniek generaliseert niet naar multidimensionale arrays of lijsten met lijsten. Wat leidt tot de Lijst met lijstenwijzigingen die onverwacht in sublijsten worden weergegevenprobleem
Antwoord 2, autoriteit 29%
Voor de volledigheid: om een multidimensionale lijst met nullen in python te declareren, moet je een lijstbegrip als dit gebruiken:
buckets = [[0 for col in range(5)] for row in range(10)]
om het delen van referenties tussen de rijen te voorkomen.
Dit ziet er onhandiger uit dan de code van chester1000, maar is essentieel als de waarden later moeten worden gewijzigd. Zie de Veelgestelde vragen over Pythonvoor meer details.
Antwoord 3, autoriteit 5%
Je kunt een list
vermenigvuldigen met een geheel getal n
om de list
n
keer te herhalen:
buckets = [0] * 100
Antwoord 4, autoriteit 4%
Gebruik dit:
bucket = [None] * 100
for i in range(100):
bucket[i] = [None] * 100
OF
w, h = 100, 100
bucket = [[None] * w for i in range(h)]
Beiden zullen de juiste lege multidimensionale bucketlist 100×100 weergeven
Antwoord 5, autoriteit 4%
gebruik numpy
import numpy
zarray = numpy.zeros(100)
En gebruik dan de Histogrambibliotheekfunctie
Antwoord 6
De vraag zegt “Hoe een array van nullen te declareren …” maar dan verwijst de voorbeeldcode naar de Python-lijst:
buckets = [] # this is a list
Als iemand echter een array wil initialiseren, stel ik voor:
from array import array
my_arr = array('I', [0] * count)
De Python-purist zou kunnen beweren dat dit niet pythonicis en suggereren:
my_arr = array('I', (0 for i in range(count)))
De pythonic-versie is erg traag en als je een paar honderd arrays moet initialiseren met duizenden waarden, is het verschil behoorlijk merkbaar.
Antwoord 7
De eenvoudigste oplossing zou zijn
"\x00" * size # for a buffer of binary zeros
[0] * size # for a list of integer zeros
Over het algemeen zou u meer pythonische code moeten gebruiken, zoals lijstbegrip (in uw voorbeeld: [0 for unused in xrange(100)]
) of string.join
gebruiken voor buffers.
Antwoord 8
Afhankelijk van wat u met de gegevens gaat doen nadat deze zijn verzameld, kan collections.defaultdict(int) nuttig zijn.
Antwoord 9
Nou, ik zou je graag willen helpen door een voorbeeldprogramma en de uitvoer ervan te posten
Programma:-
t=input("")
x=[None]*t
y=[[None]*t]*t
for i in range(1,t+1):
x[i-1]=i;
for j in range(1,t+1):
y[i-1][j-1]=j;
print x
print y
Uitvoer:-
2
[1, 2]
[[1, 2], [1, 2]]
Ik hoop dat dit een heel basaal concept van u met betrekking tot hun verklaring opheldert. Om ze te initialiseren met een aantal andere specifieke waarden, zoals ze te initialiseren met 0..je kunt ze declareren als :
x=[0]*10
Hopelijk helpt het..!! 😉
Antwoord 10
Als u meer kolommen nodig heeft:
buckets = [[0., 0., 0., 0., 0.] for x in range(0)]