Hoe een array declareren in Python?

Hoe declareer ik een array in Python?

Ik kan geen verwijzing naar arrays vinden in de documentatie.


Antwoord 1, autoriteit 100%

variable = []

Nu verwijst variable naar een lege lijst*.

Natuurlijk is dit een opdracht, geen verklaring. Er is geen manier om in Python te zeggen “deze variabele mag nooit verwijzen naar iets anders dan een lijst”, aangezien Python dynamisch wordt getypt.


*Het standaard ingebouwde Python-type wordt een lijst genoemd, geen array. Het is een geordende container van willekeurige lengte die een heterogene verzameling objecten kan bevatten (hun typen doen er niet toe en kunnen vrij worden gemengd). Dit moet niet worden verward met de array-module, die een type biedt dat dichter bij het type C array ligt; de inhoud moet homogeen zijn (allemaal van hetzelfde type), maar de lengte is nog steeds dynamisch.


Antwoord 2, autoriteit 43%

Dit is een verrassend complex onderwerp in Python.

Praktisch antwoord

Arrays worden vertegenwoordigd door class list (zie referentie en meng ze niet met generatoren).

Bekijk gebruiksvoorbeelden:

# empty array
arr = [] 
# init with values (can contain mixed types)
arr = [1, "eels"]
# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0]  # 1
arr[-1] # 6
# get length
length = len(arr)
# supports append and insert
arr.append(8)
arr.insert(6, 7)

Theoretisch antwoord

Onder de motorkap is de list van Python een wrapper voor een echte array die verwijzingen naar items bevat. Er wordt ook een onderliggende array gemaakt met wat extra ruimte.

Gevolgen hiervan zijn:

  • willekeurige toegang is echt goedkoop (arr[6653] is hetzelfde als arr[0])
  • De bewerking

  • append is ‘gratis’ met wat extra ruimte
  • De bewerking

  • insert is duur

Bekijk deze geweldige tabel met complexiteit van bewerkingen.

Zie ook deze afbeelding, waar ik heb geprobeerd de belangrijkste verschillen tussen array, array van verwijzingen en gekoppelde lijst weer te geven:
arrays, arrays overal


Antwoord 3, autoriteit 34%

Je declareert niet echt dingen, maar dit is hoe je een array maakt in Python:

from array import array
intarray = array('i')

Zie de array-module voor meer informatie: http://docs.python.org/library/ array.html

Het is nu mogelijk dat je geen array wilt, maar een lijst, maar daar hebben anderen al antwoord op gegeven. 🙂


Antwoord 4, autoriteit 17%

Ik denk dat je (bedoelde) een lijst wilt met de eerste 30 cellen al gevuld.
Dus

   f = []
   for i in range(30):
       f.append(0)

Een voorbeeld waar dit kan worden gebruikt, is in de Fibonacci-reeks.
Zie probleem 2 in Project Euler


Antwoord 5, autoriteit 10%

Dit is hoe:

my_array = [1, 'rebecca', 'allard', 15]

Antwoord 6, autoriteit 7%

Gebruik voor berekeningen numpy-arrays als volgt:

import numpy as np
a = np.ones((3,2))        # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3])     # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100)  # an array with 100 points beteen (and including) 2 and 3
print(a*1.5)  # all elements of a times 1.5
print(a.T+b)  # b added to the transpose of a

deze numpy-arrays kunnen worden opgeslagen en van schijf worden geladen (zelfs gecomprimeerd) en complexe berekeningen met grote hoeveelheden elementen zijn C-achtig snel.

Veel gebruikt in wetenschappelijke omgevingen. Zie hier voor meer informatie.


Antwoord 7, autoriteit 6%

JohnMachins opmerking zou het echte antwoord moeten zijn.
Alle andere antwoorden zijn naar mijn mening slechts tijdelijke oplossingen!
Dus:

array=[0]*element_count

Antwoord 8, autoriteit 5%

Een aantal bijdragen suggereerde dat arrays in python worden weergegeven door lijsten. Dit is incorrect. Python heeft een onafhankelijke implementatie van array() in de standaard bibliotheekmodule arrayarray.array()” en daarom is het onjuist om de twee. Lijsten zijn lijsten in python, dus wees voorzichtig met de gebruikte nomenclatuur.

list_01 = [4, 6.2, 7-2j, 'flo', 'cro']
list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']

Er is één heel belangrijk verschil tussen list en array.array(). Hoewel beide objecten geordende reeksen zijn, is array.array() een geordende homogene reeks, terwijl een lijst een niet-homogene reeks is.


Antwoord 9, autoriteit 4%

Je declareert niets in Python. Je gebruikt het gewoon. Ik raad je aan te beginnen met iets als http://diveintopython.net.


Antwoord 10, autoriteit 3%

Normaal gesproken zou ik gewoon a = [1,2,3] doen, wat eigenlijk een list is, maar voor arrays kijk je naar deze formele definitie


Antwoord 11, autoriteit 3%

Om toe te voegen aan Lennart’s antwoord, kan een array als volgt worden gemaakt:

from array import array
float_array = array("f",values)

waar waarden de vorm kunnen aannemen van een tuple, lijst of np.array, maar niet van array:

values = [1,2,3]
values = (1,2,3)
values = np.array([1,2,3],'f')
# 'i' will work here too, but if array is 'i' then values have to be int
wrong_values = array('f',[1,2,3])
# TypeError: 'array.array' object is not callable

en de uitvoer zal nog steeds hetzelfde zijn:

print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))
# array('f', [1.0, 2.0, 3.0])
# 2.0
# True

De meeste methoden voor lijsten werken ook met array, common
enen zijn pop(), extend() en append().

Afgaande op de antwoorden en opmerkingen, lijkt het erop dat de array
datastructuur is niet zo populair. Ik vind het wel leuk, hetzelfde
zoals je misschien een tuple verkiest boven een lijst.

De matrixstructuur heeft strengere regels dan een lijst of np.array, en dit kan
fouten te verminderen en debuggen gemakkelijker te maken, vooral bij het werken met numerieke
gegevens.

Pogingen om een ​​float in te voegen/toe te voegen aan een int-array geven een TypeError:

values = [1,2,3]
int_array = array("i",values)
int_array.append(float(1))
# or int_array.extend([float(1)])
# TypeError: integer argument expected, got float

Waarden die als gehele getallen zijn bedoeld (bijvoorbeeld een lijst met indices) in de array behouden
form kan daarom een ​​”TypeError: list indices must be integers, not float” voorkomen, aangezien arrays kunnen worden herhaald, vergelijkbaar met np.array en lists:

int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
    sample.append(data[i])

Vervelend is dat het toevoegen van een int aan een float-array ervoor zorgt dat de int een float wordt, zonder een uitzondering te maken.

np.array behoudt ook hetzelfde gegevenstype voor zijn vermeldingen, maar in plaats van een fout te geven, zal het zijn gegevenstype wijzigen om in nieuwe vermeldingen te passen (meestal naar double of str):

import numpy as np
numpy_int_array = np.array([1,2,3],'i')
for i in numpy_int_array:
    print(type(i))
    # <class 'numpy.int32'>
numpy_int_array_2 = np.append(numpy_int_array,int(1))
# still <class 'numpy.int32'>
numpy_float_array = np.append(numpy_int_array,float(1))
# <class 'numpy.float64'> for all values
numpy_str_array = np.append(numpy_int_array,"1")
# <class 'numpy.str_'> for all values
data = [11,22,33,44,55]
sample = []
for i in numpy_int_array_2:
    sample.append(data[i])
    # no problem here, but TypeError for the other two

Dit geldt ook tijdens de opdracht. Als het gegevenstype is opgegeven, zal np.array, waar mogelijk, de invoer transformeren naar dat gegevenstype:

int_numpy_array = np.array([1,2,float(3)],'i')
# 3 becomes an int
int_numpy_array_2 = np.array([1,2,3.9],'i')
# 3.9 gets truncated to 3 (same as int(3.9))
invalid_array = np.array([1,2,"string"],'i')
# ValueError: invalid literal for int() with base 10: 'string'
# Same error as int('string')
str_numpy_array = np.array([1,2,3],'str')
print(str_numpy_array)
print([type(i) for i in str_numpy_array])
# ['1' '2' '3']
# <class 'numpy.str_'>

of, in wezen:

data = [1.2,3.4,5.6]
list_1 = np.array(data,'i').tolist()
list_2 = [int(i) for i in data]
print(list_1 == list_2)
# True

terwijl array gewoon het volgende geeft:

invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float

Daarom is het geen goed idee om np.array te gebruiken voor typespecifieke opdrachten. De array-structuur is hier handig. list behoudt het gegevenstype van de waarden.

En voor iets dat ik nogal vervelend vind: het datatype wordt gespecificeerd als het eerste argument in array(), maar (meestal) het tweede in np.array(). 😐

De relatie met C wordt hier genoemd:
Python List vs. Array – wanneer gebruiken?

Veel plezier met het verkennen!

Opmerking: de getypte en nogal strikte aard van array neigt meer naar C dan naar Python, en door het ontwerp heeft Python niet veel typespecifieke beperkingen in zijn functies. De impopulariteit ervan zorgt ook voor positieve feedback bij collaboratief werk, en het vervangen ervan houdt meestal een extra [int(x) voor x in bestand in]. Het is daarom volledig haalbaar en redelijk om het bestaan ​​van array te negeren. Het zou de meesten van ons op geen enkele manier moeten hinderen. 😀


Antwoord 12, autoriteit 2%

Wat dacht je hiervan…

>>> a = range(12)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> a[7]
6

Antwoord 13, autoriteit 2%

In navolging van Lennart is er ook numpy dat homogene multidimensionale arrays implementeert.


Antwoord 14, autoriteit 2%

Python noemt ze lijsten. Je kunt een lijst letterlijk schrijven met vierkante haken en komma’s:

>>> [6,28,496,8128]
[6, 28, 496, 8128]

Antwoord 15

Ik had een array met strings en had een array nodig van dezelfde lengte aan booleans die gestart werden met True. Dit is wat ik deed

strs = ["Hi","Bye"] 
bools = [ True for s in strs ]

Antwoord 16

U kunt lijsten maken en deze converteren naar arrays of u kunt arrays maken met de numpy-module. Hieronder volgen enkele voorbeelden om hetzelfde te illustreren. Numpy maakt het ook gemakkelijker om met multidimensionale arrays te werken.

import numpy as np
a = np.array([1, 2, 3, 4])
#For custom inputs
a = np.array([int(x) for x in input().split()])

Je kunt deze array ook omvormen tot een 2X2-matrix met behulp van de hervormfunctie die invoer als de afmetingen van de matrix opneemt.

mat = a.reshape(2, 2)

LEAVE A REPLY

Please enter your comment!
Please enter your name here

five − two =

Other episodes