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()
|