Aller au contenu

08 Exos Listes Compléments Correction

Exercice 1⚓︎

🐍 Script Python
L = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  1. Créer une liste avec les valeurs 12, 13, 14, 15 issues de L.

    🐍 Script Python
    L[2:6]
    

  2. Créer une liste avec les 3 premières valeurs de L.

    🐍 Script Python
    L[:3]
    

  3. Créer une liste avec les 5 premières valeurs de L.

    🐍 Script Python
    L[:5]
    

  4. Créer une liste avec les valeurs d'indice impair de L.

    🐍 Script Python
    L[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().

🐍 Script Python
L = 'Dans le Python tout est bon'.split()
print(L)

La solution simple et élégante :⚓︎

🐍 Script Python
print(L[::-1])

Explications:
Pas de bornes => valeurs par défaut => on prend tout
Le pas est de -1 => à l'envers

La version explicite :⚓︎

🐍 Script Python
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

🐍 Script Python
print(list(reversed(L)))

Exercice 3⚓︎

🐍 Script Python
alphabet = 'abcdefghijklmnopqrstuvwxyz'
  1. Découpez l’alphabet en deux parties égales

    🐍 Script Python
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    
    print(alphabet[:len(alphabet) // 2])
    print(alphabet[len(alphabet) // 2:])
    
    📋 Texte
    abcdefghijklm
    nopqrstuvwxyz
    

  2. Prenez une lettre sur deux

    🐍 Script Python
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    
    print(alphabet[::2])
    
    📋 Texte
    acegikmoqsuwy
    

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.

🐍 Script Python
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 ?

🐍 Script Python
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.

🐍 Script Python
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.

🐍 Script Python
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]))
📋 Texte
(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.

🐍 Script Python
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]))
📋 Texte
(1, 8)