NSI: Les listes en Python

Exercice 1

  1. On considère les listes ci-dessous définies en extension :
>>> a=[0,2,4,6,8,10]
>>> b=[0,1,4,9,16,25,36]
>>> c=[10,9,8,7,6,5,4,3,2]

Déterminer comment les définir par compréhension.

Que retournent les commandes ci-dessous ?

Exercice 2

>>>[i+j for i in [3,1,2] for j in [2,1]]
>>>[i+j for j in [1,3] for i in [1,0,2] ]
>>>[[i+j for i in range(3)] for j in range(2)]

Exercice 3

Ecrire une fonction permettant de remplir aléatoirement un liste de longueur n par des nombres entiers compris entre 0 et 100.
La fonction utilisera une liste en compréhension et la méthode randint() du module random.

>>> # par exemple
>>> liste_aleatoire(5)
>>> [6,19,54,27,4]

Exercice 4

Ecrire une fonction inverse retournant la liste inversée d’un liste passée en paramètre.

>>> # par exemple
>>> a=[1,7]
>>> inverse_liste(a)
>>> [7,1]

Exercice 5

Ecrire une fonction triee() permettant de déterminer si une liste est triée par ordre croissant

>>> a=[7,3,6]
>>> triee(a)
False
>>> b=[5,8,15]
>>> triee(b)
True

Proposition correction exercices 3 à 5

from random import *

def liste_aleatoire(n):
    return [randint(0,100) for i in range(n)]

def liste_aleatoire1(n):
    retour=[]
    for i in range(n):
        retour.append(randint(0,100))
    return retour

def inverse_liste(liste):
    '''
    >>>inverse_liste([5,8,12])
    [12,8,5]
    '''
    retour=[]
    for i in range(len(liste)-1,-1,-1):
        retour.append(liste[i])
    return retour


def triee(liste):
    '''
    indique si une liste est triée par ordre
    croissant
    >>>triee([4,8,12])
    True
    >>>triee([4,2,12])
    False
    '''
    for i in range(len(liste)-1):
        if liste[i]>liste[i+1]:
            return False
    return True
    
def triee1(liste):
    '''
    indique si une liste est triée par ordre
    croissant
    >>>triee1([4,8,12])
    True
    >>>triee1([4,2,12])
    False
    '''   
    return liste==sorted(liste)

def fusion(list1,list2):
    '''
    >>>fusion([1,2,5],[3,12,3])
    [1,2,5,3,12,3]
    '''
    return list1+list2

def fusion1(list1,list2):
    retour=[]
    for val in list1:
        retour.append(val)
    for val in list2:
        retour.append(val)
    return retour

def negatif(liste):
    '''
    >>>negatif([1,0,1,1,1,0,1])
    [0,1,0,0,0,1,0]
    '''
    retour=[]
    for val in liste:
        if val==0:
            retour.append(1)
        else:
            retour.append(0)
    return retour

def maximum_sans_max(liste):
    '''
    >>>maximum_sans_max([8,5,3])
    8
    '''
    maxi=liste[0]
    for val in liste:
        if val>maxi:
            maxi=val
    return maxi