Aller au contenu

Parcourir les éléments d'une liste

Comme pour les chaînes et les tuples, pour parcourir les éléments d'une liste L on utilisera:

  • for element in L
  • for indice, element in enumerate(L)
  • for indice in range(len(L))

Parcours des valeurs

On peut parcourir les valeurs d'une liste par for in:

>>> tab = [42, 666, 1789, 1968, 1991, 2001]
>>> for valeur in tab:
...     print(valeur)
... 
42
666
1789
1968
1991
2001

Parcours des indices et valeurs

On obtient indice, valeur par:

>>> tab = [42, 666, 1789, 1968, 1991, 2001]
>>> for indice, valeur in enumerate(tab):
...     print(indice, valeur)
... 
0 42
1 666
2 1789
3 1968
4 1991
5 2001

Parcours par les indices

>>> tab = [42, 666, 1789, 1968, 1991, 2001]
>>> for indice in range(len(tab)):
...     print(indice, tab[indice])
... 
0 42
1 666
2 1789
3 1968
4 1991
5 2001

Somme d'éléments

Dans les programmes demandés ci-dessous, on va sommer des éléments de liste.

On a déjà rencontré ce type d'algorithme à plusieurs reprises: il s'agit du principe d'accumulateur dont la non maîtrise serait, à ce stade de l'année, rédhibitoire et serait le signe qu'il faut absolument vous entraîner plus intensément à la programmation.

Rappelons le principe:

  • On utilise une variable s initialisée à 0 dans laquelle on va accumuler (par addition) un à un les éléments de la liste que l'on veut garder.
  • Pour réaliser cette accumulation, on parcourt les éléments de la liste (boucle for): on ajoute chacun des éléments ainsi rencontrés à la variable s.
  • En sortie de boucle, s désigne la valeur somme des éléments qu'il fallait sommer.

Exercice

Proposer le code d'une fonction qui prend en paramètre une liste (on supposera que les éléments de la liste sont des entiers) et renvoie en sortie la somme des éléments de cette liste.

Un code
def somme(tab):
    """
    tab -- liste d'entiers

    renvoie la somme des éléments de la liste
    >>> somme([])
    0
    >>> somme([3])
    3
    >>> somme([1,2,3])
    6
    """
    s = 0
    for element in tab: s += element
    return s

On peut également utiliser les autres façons de parcourir les éléments de liste (mais c'est ici inutile).

Exercice

Proposer un code pour la fonction suivante:

def somme_elements_indices_pairs(tab):
    """
    tab -- liste de nombres
    renvoie la somme des éléments d'indices pairs de la liste

    >>> somme_elements_indices_pairs([])
    0
    >>> somme_elements_indices_pairs([3])
    3
    >>> somme_elements_indices_pairs([3,2])
    3
    >>> somme_elements_indices_pairs([3,2,4,5])
    7
    """
Un code
def somme_elements_indices_pairs(tab):
    """
    tab -- liste de nombres

    renvoie la somme des éléments d'indices pairs de la liste
    """
    s = 0
    for indice, element in enumerate(tab): 
        if indice%2 == 0:
            s += element
    return s

Exercice

Proposer un code pour la fonction suivante:

def sommeElementsPairs(tab):
    """
    tab -- liste de nombres

    renvoie la somme des éléments pairs de la liste
    >>> sommeElementsPairs([])
    0
    >>> sommeElementsPairs([3])
    0
    >>> sommeElementsPairs([3,2])
    2
    >>> sommeElementsPairs([3,2,4,5])
    6
    """
Attention

Distinguer bien la demande de cet exercice de celle de l'exercice précédent. Dans le présent exercice, on impose une parité sur les éléments de la liste, tandis que dans l'exercice précédent, le contrôle de parité se faisait sur les indices.

Un code
def sommeElementsPairs(tab):
    """
    tab -- liste de nombres

    renvoie la somme des éléments pairs de la liste
    >>> sommeElementsPairs([])
    0
    >>> sommeElementsPairs([3])
    0
    >>> sommeElementsPairs([3,2])
    2
    >>> sommeElementsPairs([3,2,4,5])
    6
    """
    s = 0
    for element in tab: 
        if element%2 == 0:
            s += element
    return s