08 Exos Listes Compléments Correction
Exercice 1⚓︎
L = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
-
Créer une liste avec les valeurs 12, 13, 14, 15 issues de
L.🐍 Script PythonL[2:6] -
Créer une liste avec les 3 premières valeurs de
L.🐍 Script PythonL[:3] -
Créer une liste avec les 5 premières valeurs de
L.🐍 Script PythonL[:5] -
Créer une liste avec les valeurs d'indice impair de
L.🐍 Script PythonL[1::2]
Exercice 2⚓︎
Retourner une liste composée des éléments de L en ordre inverse avec une opération de slicing, sans utiliser
.reverse() ou reversed().
L = 'Dans le Python tout est bon'.split()
print(L)
La solution simple et élégante :⚓︎
print(L[::-1])
Explications:
Pas de bornes => valeurs par défaut => on prend tout
Le pas est de -1 => à l'envers
La version explicite :⚓︎
print(L[-1:-len(L)-1:-1])
Explications :
On commence à la dernière place
On s'arrête à la première, exprimée en indices négatifs
Le pas est de -1 => à l'envers
Ne pas oublier que les indices vont:
dans le sens normal : de 0 à 5
dans le sens contraire : de -1 à -6
Ne pas oublier que les bornes d'un slice qui prend tout les éléments vont:
dans le sens normal : de 0 à 6
dans le sens contraire : de -1 à -7
La solution "optimale" :⚓︎
elle utilise un iterateur et donc ne consomme aucune ressource tant qu'on ne l'utilise pas
print(list(reversed(L)))
Exercice 3⚓︎
alphabet = 'abcdefghijklmnopqrstuvwxyz'
-
Découpez l’alphabet en deux parties égales
🐍 Script Pythonalphabet = "abcdefghijklmnopqrstuvwxyz" print(alphabet[:len(alphabet) // 2]) print(alphabet[len(alphabet) // 2:])📋 Texteabcdefghijklm nopqrstuvwxyz -
Prenez une lettre sur deux
🐍 Script Pythonalphabet = "abcdefghijklmnopqrstuvwxyz" print(alphabet[::2])📋 Texteacegikmoqsuwy
Exercice 4⚓︎
On dispose d’une liste de nombres entiers quelconques donnés par l’utilisateur. Certains d’entre eux sont présents en plusieurs exemplaires.
Écrire un script qui recopie cette liste en omettant les doublons (les nombres qui se répètent n’apparaîtront qu’une seule fois) et où les éléments sont classés par ordre croissant.
n = int(input("saisir le nombre d'élément de votre liste : "))
L1 = []
for k in range(n):
print("saisir l'élément (entier)", k + 1, "de la liste")
L1.append(int(input()))
L2 = []
for element in L1:
if element not in L2:
L2.append(element)
L2.sort() #on peut trier la 2e liste
print(f"Liste initiale : {L1}")
print(f"Liste traitée : {L2}")
Exercice 5⚓︎
On donne la liste L2 = ['ab', 'cd', 'ef', 'gh', 'ij', 'kl', 'mn', 'op', 'qr', 'st', 'uv', 'wx', 'yz'].
Comment obtenir une liste L3 avec les mêmes éléments, dans le sens inverse ?
L2 = ['ab', 'cd', 'ef', 'gh', 'ij', 'kl', 'mn', 'op', 'qr', 'st', 'uv', 'wx', 'yz']
L3 = L2[::-1]
print(L3)
Exercice 6⚓︎
Écrire un programme qui demande à l’utilisateur de saisir les éléments de son choix dans une liste et qui détermine l’élément maximal de cette liste.
n = int(input("Saisir le nombre d'élément de votre liste : "))
L = []
for k in range(n):
print("Saisir l'élément", k + 1, "de la liste")
L.append(float(input("Entrer un nombre : ")))
maxi = L[0]
for j in range(n):
if L[j] > maxi:
maxi = L[j]
print(f"La plus grande valeur de la liste est {maxi}")
Exercice 7⚓︎
Écrire une fonction pos_max(liste) qui prend en paramètre une liste non vide d’entiers liste et retourne un couple formé du maximum de la liste, ainsi que son indice. Si le maximum apparaît plusieurs fois, il faut donner la position de la première apparition. Vous ne pouvez ni utiliser max, ni index.
def pos_max(liste):
maxi = - float('inf') # on part avec la valeur la plus basse possible
# on peut aussi initialiser à liste[0]
indice_maxi = -1 # et initialiser alors l'incide_maxi à 0
for i in range(len(liste)):
if liste[i] > maxi: # si on ne change que lorsque c'est strictement plus grand
# on gardera bien l'indice de la première apparition
maxi = liste[i]
indice_maxi = i
return maxi, indice_maxi
print(pos_max([2, 7, 1, 8, 5]))
(8, 3)
Exercice 8⚓︎
Écrire une fonction min_et_max(liste) qui prend en paramètre une liste non vide d’entiers liste et retourne un couple formé du minimum et du maximum de la liste. Vous ne pouvez ni utiliser min, ni max.
def min_et_max(liste):
mini = float('inf')
maxi = - float('inf')
for nbre in liste: # on n'a pas besoin des indices, donc on peut parcourir directement les éléments
if nbre > maxi:
maxi = nbre
if nbre < mini:
mini = nbre
return mini, maxi
print(min_et_max([2,7,1,8,5]))
(1, 8)