Ga naar hoofdinhoud

Python-lijstgrootte: 8 verschillende methoden om de lengte van een lijst in Python te vinden

Vergelijk 8 verschillende methoden om de lengte van een lijst in Python te bepalen.
· 8 min lezen

Verken met AI

Python-lijsten zijn een fundamentele datastructuur die essentieel is voor het opslaan en bewerken van verzamelingen items. Dankzij hun flexibiliteit en gebruiksgemak zijn ze onmisbaar in tal van programmeertaken, van data-analyse tot webontwikkeling. Omdat ze zo veel worden gebruikt, is een veelvoorkomende behoefte het bepalen van de grootte van een lijst. Hoewel de functie len() algemeen bekend is, bieden Python’s rijke syntaxis en bibliotheken meerdere andere manieren om dit te doen, elk met eigen nuances en toepassingen. Dit artikel verkent acht van zulke methoden en geeft inzicht in hun werking en efficiëntie.

Waarom zijn Python-lijsten belangrijk?

Lijsten in Python zijn dynamische arrays die een mix van datatypen kunnen bevatten en zo een veelzijdig hulpmiddel vormen voor dataopslag en -manipulatie. Ze ondersteunen bewerkingen zoals iteratie, slicing en uitgebreide manipulaties met ingebouwde methoden zoals append(), remove() en sort(), en meer. Je kunt meer lezen over lijstmanipulaties in deze tutorial.

Hoe definieer je een lijst in Python

Voor deze tutorial gebruiken we een eenvoudige lijst om elke methode te demonstreren. Neem de lijst my_list, gedefinieerd als volgt:

# Define a sample list to be used throughout the tutorial
my_list = ["I", "Love", "Learning", "Python"]

Deze lijst is simpel, maar perfect om verschillende technieken te illustreren om de lengte te bepalen.

8 manieren om de grootte van een Python-lijst te vinden

1. Vind de grootte van een lijst met de functie len()

De functie len() is de meest directe manier om de grootte van een lijst vast te stellen. Ze is niet alleen beknopt maar ook zeer efficiënt, en daarom in de meeste gevallen de aangewezen methode.

# Use len() to find the size of the list
length = len(my_list)
print(length)  # Output: 4

2. Vind de grootte van een lijst met een for-lus

Dit wordt ook wel de naive methode genoemd: je initialiseert een teller en verhoogt die voor elk element dat je in een for-lus tegenkomt. Je kunt meer leren over for-lussen en andere soorten lussen in deze tutorial.

# Naive method using a for loop to count the list's size
counter = 0
for item in my_list:
    counter += 1
print(counter)  # Output: 4

3. Vind de grootte van een lijst met een list comprehension

List comprehensions in Python bieden een compacte syntaxis om bewerkingen op een lijst uit te voeren. Hier gebruiken we het samen met de functie sum() om de elementen te tellen.

# Using list comprehension to count the list's size
length = sum([1 for item in my_list])
print(length)  # Output: 4

4. Vind de grootte van een lijst met reduce()

De functie reduce() is wat geavanceerder maar erg krachtig. Ze past een functie met twee argumenten cumulatief toe op de items van een lijst, van links naar rechts, zodat de lijst wordt gereduceerd tot één waarde. Voor ons doel gebruiken we het om het aantal items in een lijst te tellen.

Om dit makkelijker te maken, splitsen we het op in twee delen:

  1. Definieer een eenvoudige functie: Eerst definiëren we een eenvoudige functie met twee argumenten: de huidige count (die we count_so_far noemen) en een individueel item uit de lijst (dat we _ noemen om aan te geven dat we dit item niet echt gebruiken).
  2. Gebruik reduce(): Vervolgens gebruiken we reduce() om deze functie op elk item in de lijst toe te passen en zo al tellend het aantal items te verkrijgen.
# Import the reduce function from the functools module
from functools import reduce

# Define a simple function to use with reduce
def update_count(count_so_far, _):
    """Increases the count by 1. The second parameter is not used."""
    return count_so_far + 1

# Use reduce to count the items in the list
# We start counting from 0, which is why we have '0' at the end
list_length = reduce(update_count, my_list, 0)

# Print out the result
print(list_length)  # Output will be 4

5. Vind de grootte van een lijst met iter() en next()

Begrijpen hoe je het aantal elementen in een lijst telt met iter() en next() vraagt om enige kennis van iteratoren. Een iterator is een object in Python dat ons toestaat om alle elementen in een lijst één voor één te doorlopen. De functie iter() zet een lijst om in een iterator, en de functie next() gaat naar het volgende element in de iterator.

Hier is een stapsgewijze uitleg:

  1. Maak een iterator: We beginnen met het omzetten van onze lijst naar een iterator met iter(). Dit laat ons de lijst item voor item doorlopen.
  2. Tellen met een lus: We zetten een lus op die blijft lopen tot er geen items meer zijn. In de lus gebruiken we next() om naar het volgende item te gaan. Elke keer dat dit lukt, verhogen we onze teller met 1.
  3. Het einde van de lijst afhandelen: Uiteindelijk bereiken we het einde van de lijst. Dan veroorzaakt next() een StopIteration-fout, wat aangeeft dat er geen items meer zijn. We vangen deze fout op met een try-except-blok en stoppen met tellen.

Hier is de vereenvoudigde code met commentaar om elke stap te verduidelijken:

# Step 1: Turn the list into an iterator
list_iterator = iter(my_list)

# Initialize a counter to keep track of the number of items
count = 0

# Step 2: Loop through the list using the iterator
while True:
    try:
        # Use next() to get the next item from the iterator
        next(list_iterator)
        
        # If next() was successful, increase the count
        count += 1
    except StopIteration:
        # Step 3: If we reach the end of the list, break out of the loop
        break

# Print out the total count of items in the list
print(count)  # Output will be 4

6. Vind de grootte van een lijst met enumerate()

De functie enumerate() in Python voegt een teller toe aan een iterable en retourneert die als een enumerate-object. Deze functie wordt vaak gebruikt in lussen om zowel de index als de waarde van elk item in de lijst te krijgen. Hoewel enumerate() niet gebruikelijk is om de grootte van een lijst te vinden, kunnen we het gebruiken om te laten zien hoe flexibel Python is.

# Step 1: Enumerate the list and convert it to a list of tuples (index, element)
enumerated_list = list(enumerate(my_list))

# Step 2: Extract the last tuple (which contains the last index and the last element)
last_tuple = enumerated_list[-1]

# Step 3: The size of the list is the last index plus 1 (because of zero-based indexing)
list_size = last_tuple[0] + 1

# Print out the size of the list
print(list_size)  # Output will be 4

7. Vind de grootte van een lijst met NumPy

NumPy is een krachtige Python-bibliotheek die veel wordt gebruikt in wetenschappelijk rekenen. Het biedt ondersteuning voor grote, multidimensionale arrays en matrices, samen met een verzameling wiskundige functies om op deze arrays te werken. Voor iedereen die met numerieke data werkt, is NumPy onmisbaar: het biedt efficiënte opslag en bewerkingen op grote datasets. Om de grootte van een lijst in Python met NumPy te vinden, kunnen we het attribuut .size gebruiken, zoals hieronder getoond.

# Import the NumPy library
import numpy as np

# Step 1: Convert the list into a NumPy array
my_array = np.array(my_list)

# Step 2: Use the 'size' attribute of the NumPy array to find its size
array_size = my_array.size

# Print out the size of the array (which is the same as the length of the list)
print(array_size)  # Output will be 4

8. Vind de grootte van een lijst met map() en sum()

Vergelijkbaar met list comprehensions gebruikt deze methode map() om een functie toe te passen die 1 teruggeeft voor elk element, en vervolgens sum() om deze waarden op te tellen en zo het aantal elementen te bepalen. Deze methode vereist bekendheid met lambda-functies in Python. Om bij te blijven, bekijk zeker deze Python lambda-tutorial.

# Using map() and sum() to count the list's size
length = sum(map(lambda x: 1, my_list))
print(length)  # Output: 4

De prestaties van verschillende Python-lijstgroottemethoden vergelijken

Het is één ding om alle acht methoden te kennen om de grootte van lijsten te vinden, maar iets anders om de beste methode te gebruiken. Om de prestaties van de acht besproken methoden te vergelijken, gebruiken we Pythons timeit-module, die een eenvoudige manier biedt om kleine stukjes Python-code te timen. Dit geeft ons een duidelijk beeld van hoe elke methode zich verhoudt qua uitvoeringssnelheid. Let op: uitvoeringstijden kunnen variëren afhankelijk van je machine of waar je de code draait.

Het experiment opzetten

Om het onszelf makkelijk te maken, definiëren we onze lijst en de functies voor elke methode. Het is oké als je niet vertrouwd bent met functies; we systematiseren hier alleen de verschillende methoden om ze makkelijker te kunnen vergelijken.

import timeit
from functools import reduce
import numpy as np

# Define the list
my_list = ["I", "Love", "Learning", "Python"] * 100  # Increased size for better statistical signifcance

# Method 1: Using len()
def method_len():
    return len(my_list)

# Method 2: Looping through the list
def method_loop():
    counter = 0
    for _ in my_list:
        counter += 1
    return counter

# Method 3: Using a list comprehension
def method_list_comprehension():
    return sum([1 for _ in my_list])

# Method 4: Using reduce()
def method_reduce():
    return reduce(lambda acc, _: acc + 1, my_list, 0)

# Method 5: Using iter() and next()
def method_iter_next():
    iterator = iter(my_list)
    counter = 0
    while True:
        try:
            next(iterator)
            counter += 1
        except StopIteration:
            break
    return counter

# Method 6: Using enumerate()
def method_enumerate():
    return max(enumerate(my_list, 1))[0]

# Method 7: Using numpy
def method_numpy():
    np_array = np.array(my_list)
    return np_array.size

# Method 8: Using map() and sum()
def method_map_sum():
    return sum(map(lambda _: 1, my_list))

Elke methode timen

Vervolgens gebruiken we timeit.timeit() om elke functie in de gespecificeerde volgorde te timen:

# List to hold method names and their execution times
timing_results = []

methods = [method_len, method_loop, method_list_comprehension, method_reduce, 
           method_iter_next, method_enumerate, method_numpy, method_map_sum]

# Time each method
for method in methods:
 # Execute the operation 100000 times for better statistical significance  
    time_taken = timeit.timeit(method, number=100000)
    timing_results.append((method.__name__, time_taken))

# Sort results by time taken for better readability
timing_results.sort(key=lambda x: x[1])

# Print the timing results
for method_name, time_taken in timing_results:
    print(f"{method_name}: {time_taken:.5f} seconds")

Door dit te draaien in DataLab, krijgen we de volgende resultaten:

Methode

Tijdsduur

De len()-methode

0.03410 seconden

De list-comprehensionmethode

1.50325 seconden

De for-lusmethode

1.93764 seconden

De enumerate()-methode

2.26446 seconden

De methode met map() en sum()

2.41315 seconden

De methode met iter() en next()

3.08434 seconden

De reduce()-methode

4.41239 seconden

De numpy-methode

10.61716 seconden

Conclusie

Kortom, deze verkenning van verschillende methoden om de grootte van een lijst in Python te bepalen laat niet alleen de veelzijdigheid en kracht van Python zien, maar benadrukt ook het belang van inzicht in de efficiëntie en toepasbaarheid van verschillende benaderingen.

Voor beginners is het belangrijk om te beginnen met de meest eenvoudige en efficiënte methoden, zoals de ingebouwde functie len(), die is geoptimaliseerd voor prestaties en leesbaarheid. Wil je meer leren over werken met lijsten, bekijk dan de volgende bronnen:

Adel Nehme

Auteur

Adel Nehme

Adel is docent Data Science, spreker en VP Media bij DataCamp. Adel heeft diverse cursussen en live trainingen uitgebracht over data-analyse, machine learning en data engineering. Hij is gepassioneerd over het verspreiden van datavaardigheden en data-geletterdheid binnen organisaties en de wisselwerking tussen technologie en de samenleving. Hij heeft een MSc in Data Science and Business Analytics. In zijn vrije tijd vind je hem vaak met zijn kat Louis.

Onderwerpen

Gerelateerd