Aller au contenu

Présence d'un élément dans un tableau

Comme pour les chaînes de caractères, il est possible de rechercher un élément possdént une propriété particulière dans un tableau.

Algorithme de recherche dans un tableau

initialisation des variables
Le premier élément du tableau est-il celui cherché ?

Tant que l'élément courant n'est pas le dernier et qu'on n'a pas trouvé :
    accéder à l'élément suivant du tableau
    instructions (bloc)    
Dans cet algorithme, « avoir trouvé » signifie qu'un des éléments du tableau vérifie la propriété recherchée.
Dans le cas d'une fonction, c'est généralement cet élément (ou son indice) qui est renvoyé.

Exemple

Définir la fonction est_present() qui prend comme paramètres un tableau d'entiers et un entier puis qui renvoie True si l'entier est dans le tableau, False sinon.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def est_present(tab, valeur):
    """
    tab - list, tableau d'entiers
    valeur - int
    Sortie: bool - True si valeur est un élément de tab, False sinon
    >>> est_present([], 3)
    False
    >>> est_present([2, 6], 3)
    False
    >>> est_present([3, 2, 6], 3)
    True
    """
    pass


##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Une première solution avec une boucle while

Solution « naturelle » en utilisant une boucle « Tant que » :

 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
def est_present(tab, valeur):
    """
    tab - list, tableau d'entiers
    valeur - int
    Sortie: bool - True si valeur est un élément de tab, False sinon
    >>> est_present([], 3)
    False
    >>> est_present([2, 6], 3)
    False
    >>> est_present([3, 2, 6], 3)
    True
    """
    indice = 0
    dernier_indice = len(tab)-1
    while (indice <= dernier_indice) and (tab[indice] != valeur):
        indice = indice + 1
    if indice == dernier_indice+1:
        return False
    else:
        return True

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()

Une deuxième solution avec une boucle for

Solution avec une boucle « Pour » interrompue dès qu'une valeur recherchée est trouvée :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def est_present(tab, valeur):
    """
    tab - list, tableau d'entiers
    valeur - int
    Sortie: bool - True si valeur est un élément de tab, False sinon
    >>> est_present([], 3)
    False
    >>> est_present([2, 6], 3)
    False
    >>> est_present([3, 2, 6], 3)
    True
    """
    for element in tab:
        if element == valeur:
            return True
    return False

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()

Encore une solution

Solution plus concise à l'aide de l'opérateur in :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def est_present(tab, valeur):
    """
    tab - list, tableau d'entiers
    valeur - int
    Sortie: bool - True si valeur est un élément de tab, False sinon
    >>> est_present([], 3)
    False
    >>> est_present([2, 6], 3)
    False
    >>> est_present([3, 2, 6], 3)
    True
    """
    return valeur in tab

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()