Hoe krijg ik een lege reeks van elke maat in Python?

Ik wil eigenlijk een python-equivalent hiervan in C:

int a[x];

Maar in Python verklaar ik een array zoals:

a = []

En het probleem is dat ik willekeurige slots met waarden willen toewijzen zoals:

a[4] = 1

Maar ik kan dat niet met Python, omdat de array leeg is.


Antwoord 1, Autoriteit 100%

Als u door “array” eigenlijk een Python-lijst bedoelt, kunt u

gebruiken

a = [0] * 10

of

a = [None] * 10

Antwoord 2, Autoriteit 10%

Je kunt niet precies doen wat je wilt in Python (als ik je correct lees). U moet waarden instellen voor elk element van de lijst (of zoals u het noemde, array).

Maar probeer dit:

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

Gebruik voor lijsten met andere typen iets behalve 0. Noneis vaak ook een goede keuze.


Antwoord 3, Autoriteit 7%

U kunt numpy gebruiken:

import numpy as np

Voorbeeld van lege array :

np.empty([2, 2])
array([[ -9.74499359e+001,   6.69583040e-309],
       [  2.13182611e-314,   3.06959433e-309]])  

Antwoord 4, autoriteit 3%

je kunt dat ook uitbreiden met de methode van de lijst uitbreiden.

a= []
a.extend([None]*10)
a.extend([None]*20)

Antwoord 5, autoriteit 3%

Declareer gewoon de lijst en voeg elk element toe. Bijvoorbeeld:

a = []
a.append('first item')
a.append('second item')

Antwoord 6

Als u (of andere zoekers van deze vraag) daadwerkelijk geïnteresseerd waren in het maken van een aaneengesloten array om te vullen met gehele getallen, overweeg dan bytearrayen memoryivew:

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 
ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))
ints[0]
# 0
ints[0] = 16
ints[0]
# 16

Antwoord 7

x=[]
for i in range(0,5):
    x.append(i)
    print(x[i])

Antwoord 8

Als je echt een C-stijl array wilt

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

Merk op dat er geen concept is van een niet-geïnitialiseerdevariabele in python. Een variabele is een naam die aan een waarde is gebonden, dus die waarde moet iets hebben. In het bovenstaande voorbeeld wordt de array geïnitialiseerd met nullen.

Dit is echter ongebruikelijk in python, tenzij je het echt nodig hebt voor dingen op een laag niveau. In de meeste gevallen kun je beter een lege lijst of lege numpy-array gebruiken, zoals andere antwoorden suggereren.


Antwoord 9

De (volgens mij enige) manier om “willekeurige slots” toe te wijzen, is door een woordenboek te gebruiken, bijvoorbeeld:

a = {}     # initialize empty dictionary
 a[4] = 1   # define the entry for index 4 to be equal to 1
 a['French','red'] = 'rouge'  # the entry for index (French,red) is "rouge".

Dit kan handig zijn voor “snelle hacks”, en de overhead voor het opzoeken is niet relevant als u geen intensieve toegang hebt tot de elementen van de array.
Anders is het efficiënter om te werken met vooraf toegewezen (bijv. numpy) arrays van vaste grootte, die u kunt maken met a = np.empty(10)(voor een niet-geïnitialiseerde vector van lengte 10) of a = np.zeros([5,5])voor een 5×5 matrix geïnitialiseerd met nullen).

Opmerking: in uw C-voorbeeld moet u ook de array (uw int a[x];) toewijzen voordat u een (niet zo) “willekeurig slot” toewijst (namelijk een integer-index tussen 0 en x-1).

Referenties:

Other episodes