Programmer en Python en 2nde

Opérations sur listes

Plus tard ! Le contenu de cette page peut être travaillé en seconde lecture.

Supprimer un élément de rang donné

Écrire une fonction en Python qui respecte la spécification suivante :

Paramètres une liste L et un entier i ( 0 \( \leqslant\) i \( \leqslant\) len(L)-1 )
Valeur renvoyée une liste de même contenu que L mais sans l'élément d'indice i
  • Une piste
  • Une solution
  • Fonction del()
  • Méthode .pop()

    On déclare une nouvelle liste L vide avec :

    
    L = []
    			

def supprime_element(liste, indice_element) :
    L = []
    for i in range(len(liste)):
        if i != indice_element :
            L.append(liste[i])
    return L
	
	
L1 = [1, 2, 3, 4, 5, 6]

# on supprime l'élément d'indice 3,
# c'est à dire ici l'élément de valeur 4
L2 =  supprime_element(L1, 3)
print(L2)

Python permet une écriture plus synthétique de cette fonction (mais il n'est pas obligatoire de maîtriser ce type de syntaxe pour bien programmer quand même !):


def supprime_element(liste, indice_element) :
    return [ liste[i] for i in range(len(liste)) if i!=indice_element]
	 

L1 = [1, 2, 3, 4, 5, 6]

# on supprime l'élément d'indice 3,
# c'est à dire ici l'élément de valeur 4
L2 =  supprime_element(L1, 3)
print(L2)

On peut supprimer l'élément d'indice i de la liste L grâce à la fonction del() :


		
		

Toutefois, cette proposition n'est pas tout à fait équivalente à la solution précédente : la liste L modifiée ici est en effet la liste d'origine, tandis que dans la proposition précédente, la liste d'origine restait inchangée.

On peut utiliser également la méthode .pop(i) qui supprime l'élément d'indice i. L'avantage de .pop() est qu'on peut en plus récupérer l'élément supprimé dans une variable :


		
		

Même remarque sur la liste que la solution précédente : la liste d'origine a été modifiée.

Supprimer un élément de valeur donnée

Écrire une fonction en Python qui respecte la spécification suivante :

Paramètres une liste L et une valeur val
Valeur renvoyée une liste de même contenu que L mais telle que le premier élément de valeur val ait été supprimé si cette valeur est présente dans la liste initiale. Si la valeur val est absente, la fonction renvoie une liste de même contenu que la liste initiale.
  • Une solution
  • Méthode .remove()

def supprime_premiereOccurrence_valeur(liste, val):
    L = []
    trouve = False
    indice = 0
    while not(trouve) and indice < len(liste) :
        if liste[indice] == val :
            trouve = True
        else :
            L.append(liste[indice])
        indice += 1
    for i in range(indice, len(liste)):
        L.append(liste[i])
    return L


L = [2, 8, 9, 2, 4, 6, 3, 5, 3, 4]

M = supprime_premiereOccurrence_valeur(L, 3)
print(M)

print( supprime_premiereOccurrence_valeur(L, 15) )

0n peut supprimer la première occurence d'une valeur dans une liste en appliquant à cette liste la méthode .remove() :


		
		

Comme indiqué ci-dessus, seul le premier élément ayant cette valeur est supprimé :


		
		

Cette proposition n'est pas tout à fait équivalente à la solution précédente : la liste L modifiée ici est en effet la liste d'origine, tandis que dans la proposition précédente, la liste d'origine restait inchangée.

Parcourir une liste à contre-sens

Écrire une fonction en Python qui respecte la spécification suivante :

Paramètres une liste L
Valeur renvoyée /
Affichage valeurs de la liste, du dernier au premier élément
  • Une solution
  • Une autre solution
  • Une dernière solution

Avec une boucle :


L = ['a','b','c','d','e','f','g']

for i in range(len(L)-1, -1, -1) :
    print(L[i], end=" ")

Une astuce

Voici une autre façon d'écrire cette boucle :


L = ['a','b','c','d','e','f','g']

 

for i in range(len(L)) :
    print(L[~i], end=" ")

La documentation sur l'opération « ~ » est disponible via ce lien. Le programme précédent revient à écrire :


L = ['a','b','c','d','e','f','g']

 

for i in range(len(L)) :
    print(L[-(i+1)], end=" ")

En inversant la liste :


L = ['a','b','c','d','e','f','g']

L.reverse()

for x in L :
    print(x, end=" ")

Cette solution présente le défaut de modifier la liste.

En parcourant les éléments de la liste du dernier au premier grâce aux tranches :


L = ['a','b','c','d','e','f','g']

for x in L[::-1] :
    print(x, end=" ")

La liste n'est pas modifiée avec cette solution.