Programmeren in Python/Arrays

Uit Wikibooks
Naar navigatie springen Naar zoeken springen
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 gebruikte types. Ook maken we in het vervolg 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).

Lists[bewerken]

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 index 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 herordent de lijst zichzelf zodat er geen gaten in de nummering vallen.

Tuples[bewerken]

Tupels zijn gelijkwaardig met lijsten, het grote verschil is dat tupels onveranderlijk zijn. Zodra 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.

Dictionaries[bewerken]

Dictionaries zijn ook gelijkwaardig aan lijsten, en ze zijn tevens veranderlijk. Dit wil zeggen dat je net zoals bij een lijst elementen 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 waarbij de sleutels uit oplopende natuurlijke getallen bestaan.

Woordenboeken worden gedeclareerd met accolades, elk element is eerste gedeclareerd door zijn sleutel, 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'}

Sets[bewerken]

Een set is ook vergelijkbaar met een lijst. Het verschil is dat een set geen volgorde kent en dat dubbele objecten niet toegestaan zijn. Objecten zijn niet gekoppeld aan een nummer (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. Sets zijn ook efficiënter voor het toevoegen en verwijderen van data, en testen 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'])

Sets hebben geen volgorde. Toegevoegde waarden worden in een niet gedefinieerde positie geplaatst en de positie kan wijzigen.

>>> 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. kan er een hash waarde van berekend 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.

Frozenset[bewerken]

Een frozenset is een 'bevroren' versie van een set (zoals een tupel een 'bevroren' lijst is).

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

Andere datastructuren[bewerken]

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 standaardwaarde in plaats van een fout terug geeft, indien het woordenboek een sleutel niet bevat.
collections.deque
Een wachtrij met twee einden die manipulaties van de uiteinden 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.

Externe datastructuren[bewerken]

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 woordenboek

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.