Cursus
Lijsten zijn ingebouwde datastructuren in Python die heterogene items opslaan en efficiënte toegang tot deze items mogelijk maken. De taak om lijsten op te delen in N-grote stukken is gangbaar wanneer er een limiet is aan het aantal items dat je programma in één verzoek kan verwerken.
Lijsten
Lijsten zijn datastructuren die gemengde waarden of items kunnen bevatten. Voorbeelden van items zijn integers, floats, strings, enz. Lijsten zijn muteerbaar, wat betekent dat je de inhoud van een lijst kunt wijzigen zonder de identiteit ervan te veranderen. Ze worden geschreven met rechte haken [ ], en de items erin worden gescheiden door een komma (,). Laten we een lijst met getallen maken om mee te werken...
# Creating a list of 95 numbers
list_numbers = list(range(1, 96))
print(list_numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95]
De functie range() genereert een lijst met getallen. De vorm is: range([start], stop[, step]) waarbij 'start' en 'step' optionele parameters zijn. start is het begingetal in de reeks, stop is het getal tot waar er gegenereerd wordt, maar dit getal zelf wordt niet meegenomen. step is het verschil tussen elk getal in de reeks. Deze functie is 0-geïndexeerd, wat betekent dat lijstindexen beginnen bij 0, niet bij 1, wanneer start niet is opgegeven.
Stel nu dat je de lijst wilt opdelen in kleinere lijsten met elk 5 elementen.
Eén manier om dit te doen is door een generator te definiëren. Een generator is een elegante manier om een iterator te definiëren. Wat is een iterator, vraag je? Simpel gezegd: een iterator is een object dat weet hoe het het volgende item moet berekenen en teruggeven in het object waar je overheen itereert. Je kunt meer lezen over iterators en generators in DataCamps Python Iterator Tutorial.
We definiëren een functie die de generator bevat die het werk voor ons doet.
# Yields successive 'n' sized chunks from list 'list_name'
def create_chunks(list_name, n):
for i in range(0, len(list_name), n):
yield list_name[i:i + n]
# Call the 'create_chunks' function to divide the list further into sub-lists of 10 items each
print(list(create_chunks(list_numbers, 10)))
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]
Een andere manier om hetzelfde te doen is door simpelweg list comprehension te gebruiken. Je kunt er meer over lezen in DataCamps Python List Comprehension Tutorial.
print([list_numbers[i: i+10] for i in range(0, len(list_numbers), 10)])
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]
Naarmate het probleem complexer wordt, kunnen list-comprehension-statements lastiger worden om te begrijpen en te debuggen. Daarom kan het schrijven van een duidelijke functie, zoals met de generator, nuttiger zijn en makkelijker bij te houden.
In deze tutorial heb je twee manieren geleerd om een veelvoorkomend probleem bij lijsten op te lossen. Bekijk ook DataCamps cursus Data Types for Data Science.
