Programmeren in Python/Arrays

Uit Wikibooks

Ga naar: navigatie, zoek
Vorige: Gebruik van Wiskunde Index Volgende: Beslissingscontrole

Arrays staan het gebruik van meerdere variabelen op een georganiseerde manier toe. Er zijn vier types arrays in Python: Lists (lijsten), Tuples (tupels), Dictionaries (woordenboeken) en Sets (verzamelingen). Eigenlijk zijn er meerdere, maar deze zijn de meest courant gebruikte types. Ook gaan we in het vervolg gebruik maken we afwisselend gebruik van de Engelse en Nederlandstalige benamingen (typisch de Engelse wanneer het om het datatype gaat, en de Nederlandse wanneer het om het concept gaat).

Inhoud

[bewerken] Lists

Een list is net wat het woord zegt: een lijst van variabelen, met een bepaalde volgorde. Een list wordt aangemaakt door middel van vierkante haakjes en de individuele waarden zijn gescheiden door komma's. Bijvoorbeeld:

spam = ["bacon", "eggs", 42]

Lijsten kunnen objecten van verschillende types bevatten. In het vorige voorbeeld bevat het de stringobjecten "eggs" en "bacon" maar ook het getal 42.


Individuele items van een list kunnen worden opgeroepen door hun index in vierkante haken achter de variabelenaam te zetten. De intex begint bij 0. Bijvoorbeeld:

>>> spam
['bacon', 'eggs', 42]
>>> spam[0]
'bacon'
>>> spam[1]
'eggs'
>>> spam[2]
42

Een negatieve index kan ook, dan begint de lijst achteraan:

>>> spam[-1]
42
>>> spam[-2]
'eggs'
>>> spam[-3]
'bacon'

De functie len() werkt eveneens bij arrays, dit geeft het aantal items in de array terug:

>>> len(spam)
3

Merk op dat de len() functie het aantal element telt, dus in deze lijst kan men het laatste element (het getal 42) vinden op index (len(spam) -1).

Net zoals een variabele kunnen de items in een lijst ook veranderd worden:

>>> spam = ["bacon", "eggs", 42]
>>> spam
['bacon', 'eggs', 42]
>>> spam[1]
'eggs'
>>> spam[1] = "ketchup"
>>> spam
['bacon', 'ketchup', 42]

Het is ook mogelijk om objecten toe te voegen aan een lijst. Er zijn een aantal mogelijkheden maar de eenvoudigste is met behulp van de append() methode:

>>> spam.append(10)
>>> spam
['bacon', 'eggs', 42, 10]

append() voegt elementen aan het einde van de lijst toe. Om element binnen in een lijst tussen te schuiven ter hoogte van een bepaalde index kan men gebruik maken van insert(). Bijvoorbeeld:

>>> spam.insert(1, 'and')
>>> spam
['bacon', 'and', 'eggs', 42, 10]

Door middel van del() kan men elementen verwijderen:

>>> spam
['bacon', 'and', 'eggs', 42, 10]
>>> del(spam[1])
>>> spam
['bacon', 'eggs', 42, 10]
>>> spam[0]
'bacon'
>>> spam[1]
eggs
>>> spam[2]
42
>>> spam[3]
10

Zoals men ziet heordert de lijst zichzelf zodat er geen gaten in de nummering vallen.

[bewerken] Tuples

Tupels zijn gelijkaardig met lijsten, het grote verschil is dat tupels onveranderlijk zijn. Eens een tupel aangemaakt is, is er geen mogelijkheid om een wijziging aan te brengen: het is onmogelijk om iets toe te voegen, te verwijderen of te wijzigen. Los hiervan werken tupels op dezelfde manier als lijsten, tupels kunnen, net als lijsten, een zelfde object meermaals bevatten.

Om een tupel te declareren maakt men gebruik van komma's:

unchanging = "rocks", 0, "the universe"

Het is vaak nodig om haakjes te gebruiken om het verschil tussen verschillende tupels aan te duiden, dit is typisch zo bij meerdere assignaties op dezelfde lijn:


foo, bar = "rocks", 0, "the universe" # An error: 2 elements on left, 3 on right
foo, bar = "rocks", (0, "the universe")

Onnodige haakjes kunnen gebruikt worden zonder impact, maar geneste haakjes duiden op geneste tupels:

>>> var = "me", "you", "us", "them"
>>> var = ("me", "you", "us", "them")

Beide produceren hetzelfde:

>>> print(var) 
('me', 'you', 'us', 'them')

Echter:

>>> var = ("me", "you", ("us", "them"))
>>> print(var) 
('me', 'you', ('us', 'them')) # A tuple of 3 elements, the last of which is itself a tuple.

toont duidelijk een genest tupel.

[bewerken] Dictionaries

Dictionaries zijn ook gelijkaardig aan lijsten, en ze zijn tevens veranderlijk. Dit wil zeggen dat je net zoals bij een lijst element kan toevoegen, wijzigen en verwijderen uit een dictionary. Het grote verschil is dat elementen niet gekoppeld zijn aan een nummer zoals het geval is bij een lijst. Elk element in een woordenboek heeft twee delen: een sleutel (key), en een waarde. Een bepaalde sleutel opzoeken in een woordenboek geeft de waarde gekoppeld aan deze sleutel terug. Eigenlijk kan men een lijst beschouwen als een special geval van een woordenboek, t.t.z. een woordenboek waaarbij de sleutels uit oplopende natuurlijke getallen bestaan.

Woordenboeken worden gedeclareerd met accolades, elk element is eerste gedeclareerd door zijn sleuten, vervolgens een dubbelpunt en tenslotte de waarde. Bijvoorbeeld:

>>> definitions = {"guava": "a tropical fruit", "python": "a programming language", "the answer": 42}
>>> definitions
{'python': 'a programming language', 'the answer': 42, 'guava': 'a tropical fruit'}
>>> definitions["the answer"]
42
>>> definitions["guava"]
'a tropical fruit'
>>> len(definitions)    
3

Een waarde toevoegen is eveneens simpel, het bijna hetzelfde als het declararen van een variabele:

>>> definitions["new key"] = "new value"
>>> definitions
{'python': 'a programming language', 'the answer': 42, 'guava': 'a tropical fruit', 'new key': 'new value'}

[bewerken] Sets

Een set is, alweer, net zoals een lijst, het verschil is dat een set geen volgorde kent en dat geen dubbele objecten toegestaan zijn. Objecten zijn niet gekoppeld aan een number (zoals bij een lijst of een tupel), maar evenmin aan een sleutel (zoals bij een woordenboek). De reden om een set te gebruiken is omdat een set veel sneller is (O(lg n)) dan een lijst of tupel (O(n)), zeker voor een groot aantal elementen. Ook zijn sets efficiënter voor het toevoegen en verwijderen van data en kan ook zeer snel getest worden of een waarde tot de set behoort.

>>> mind = set([42, 'a string', (23, 4)])
>>> mind
set([(23, 4), 42, 'a string'])


>>> mind = set([42, 'a string', 40, 41])
>>> mind
set([40, 41, 42, 'a string'])
>>> mind = set([42, 'a string', 40, 0])
>>> mind
set([40, 0, 42, 'a string'])
>>> mind.add('hello')
>>> mind
set([40, 0, 42, 'a string', 'hello'])

Bemerk dat sets geen volgorde hebben, toegevoegde waarden zullen in een niet gedefinieerde positie geplaatst worden, en deze positie kan wijzigen in de tijd.

>>> mind.add('duplicate value')
>>> mind.add('duplicate value')
>>> mind
set([0, 'a string', 40, 42, 'hello', 'duplicate value'])

Een set kan een waarde slechts eenmaal bevatten, dit in tegenstelling tot lijsten, tupels en woordenboeken. Ook kan een set niet alle soorten objecten bevatten, een set kan enkel onveranderlijke maar hashbare (t.t.z. er kan een hash waarde van berekende worden) objecten bevatten. Zo zijn integers, strings en tupels hashbaar; lijsten, woordenboeken en andere sets (behalve frozensets) zijn dat niet en kunnen dus niet in een set opgenomen worden.

[bewerken] Frozenset

Een frozenset staat tot een set zoals een tupel staat tot een lijst. Een frozenset is een constante versie van een set.

>>> frozen=frozenset(['life','universe','everything'])
>>> frozen
frozenset(['universe', 'life', 'everything'])

[bewerken] Andere datastructuren

Python biedt ook andere array types aan, deze zijn echter minder frequent gebruikt en dienen geïmporteerd te worden uit de standaard bibliotheek voor ze gebruikt kunnen worden. Bijvoorbeeld:

array
Een lijst die slechts één type van objecten mag bevatten.
collections.defaultdict
Een woordenboek dat een standaard waarde terug geeft indien het woordenboek een sleutel niet bevat in plaats van een fout.
collections.deque
Een wachtrij met twee eindes die manipulaties van de uiteindes efficiënt mogelijk maakt.
heapq
Een prioriteitswachtrij.
Queue
Een thread-veilige multi-producent, multi-consument wachtrij voor gebruik binnen multithreaded applicaties. Merk op dat een lijst perfect gebruikt kan worden als een wachtrij in code die slechts één thread gebruikt.

[bewerken] Externe datastructuren

Bepaalde datastructuren in Python bevinden zich niet in de standaard bibliotheek. Sommige van deze zijn zeer gespecialiseerd in gebruik en daarom worden de best bekende hier vermeld:

numpy.array
Gebruikt bij intensief wiskundige operaties.
sorteddict
Een gesorteerd wordenboek

En natuurlijk zijn er nog veel meer.

Vorige: Gebruik van Wiskunde Index Volgende: Beslissingscontrole

 

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.
Persoonlijke instellingen