Een array met vaste grootte initialiseren in Python

Ik zou graag willen weten hoe ik een array (of lijst), die nog moet worden gevuld met waarden, kan initialiseren om een gedefinieerde grootte te krijgen.

Bijvoorbeeld in C:

int x[5]; /* declared without adding elements*/

Hoe doe ik dat in Python?


Antwoord 1, autoriteit 100%

U kunt gebruiken:

>>> lst = [None] * 5
>>> lst
[None, None, None, None, None]

Antwoord 2, autoriteit 34%

Waarom worden deze vragen niet beantwoord met het voor de hand liggende antwoord?

a = numpy.empty(n, dtype=object)

Dit creëert een array met lengte n die objecten kan opslaan. Het kan niet worden vergroot of verkleind of eraan worden toegevoegd. In het bijzonder verspilt het geen ruimte door zijn lengte op te vullen. Dit is het Python-equivalent van Java’s

Object[] a = new Object[n];

Als u echt geïnteresseerd bent in prestaties en ruimte en weet dat uw array alleen bepaalde numerieke typen zal opslaan, kunt u het dtype-argument wijzigen in een andere waarde, zoals int. Numpy zal deze elementen vervolgens rechtstreeks in de array inpakken in plaats van de array-referentie int-objecten te maken.


Antwoord 3, autoriteit 16%

Doe dit:

>>> d = [ [ None for y in range( 2 ) ] for x in range( 2 ) ]
>>> d
[[None, None], [None, None]]
>>> d[0][0] = 1
>>> d
[[1, None], [None, None]]

De andere oplossingen zullen tot dit soort problemen leiden:

>>> d = [ [ None ] * 2 ] * 2
>>> d
[[None, None], [None, None]]
>>> d[0][0] = 1
>>> d
[[1, None], [1, None]]

Antwoord 4, autoriteit 5%

Je kunt het beste de numpy-bibliotheek gebruiken.

from numpy import ndarray
a = ndarray((5,),int)

Antwoord 5, autoriteit 5%

>>> import numpy
>>> x = numpy.zeros((3,4))
>>> x
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> y = numpy.zeros(5)   
>>> y
array([ 0.,  0.,  0.,  0.,  0.])

x is een 2-d array en y is een 1-d array. Ze zijn beide geïnitialiseerd met nullen.


Antwoord 6, autoriteit 4%

Een gemakkelijke oplossing is x = [None]*length, maar merk op dat alle lijstelementen worden geïnitialiseerd op None. Als de grootte echtvast is, kun je ook x=[None,None,None,None,None]doen. Maar strikt genomen krijg je hoe dan ook geen ongedefinieerde elementen omdat deze plaag niet bestaat in Python.


Antwoord 7, autoriteit 3%

>>> n = 5                     #length of list
>>> list = [None] * n         #populate list, length n with n entries "None"
>>> print(list)
[None, None, None, None, None]
>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[None, None, None, None, 1]
>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[None, None, None, 1, 1]
>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[None, None, 1, 1, 1]

of met werkelijk niets in de lijst om mee te beginnen:

>>> n = 5                     #length of list
>>> list = []                 # create list
>>> print(list)
[]
>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[1]

op de 4e iteratie van append:

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[1,1,1,1]

5 en alle volgende:

>>> list.append(1)            #append 1 to right side of list
>>> list = list[-n:]          #redefine list as the last n elements of list
>>> print(list)
[1,1,1,1,1]

Antwoord 8

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 9

U kunt proberen Descriptor te gebruiken om de grootte te beperken

class fixedSizeArray(object):
    def __init__(self, arraySize=5):
        self.arraySize = arraySize
        self.array = [None] * self.arraySize
    def __repr__(self):
        return str(self.array)
    def __get__(self, instance, owner):
        return self.array
    def append(self, index=None, value=None):
        print "Append Operation cannot be performed on fixed size array"
        return
    def insert(self, index=None, value=None):
        if not index and index - 1 not in xrange(self.arraySize):
            print 'invalid Index or Array Size Exceeded'
            return
        try:
            self.array[index] = value
        except:
            print 'This is Fixed Size Array: Please Use the available Indices'
arr = fixedSizeArray(5)
print arr
arr.append(100)
print arr
arr.insert(1, 200)
print arr
arr.insert(5, 300)
print arr

UITGANG:

[None, None, None, None, None]
Append Operation cannot be performed on fixed size array
[None, None, None, None, None]
[None, 200, None, None, None]
This is Fixed Size Array: Please Use the available Indices
[None, 200, None, None, None]

Antwoord 10

Eén ding vind ik gemakkelijk te doen is dat ik een array instel
van lege snaren voor de grootte die ik geef, bijvoorbeeld

Code:

import numpy as np
x= np.zeros(5,str)
print x

Uitgang:

['' '' '' '' '']

Ik hoop dat dit nuttig is 🙂

Other episodes