'''Implémentation d'une LISTE MUABLE en utilisant un tableau dynamique list-Python
 
Description des primitives efficaces
------------------------------------
 
1 ::: nouvelleListe() -> 'Liste'                          Coût CST
2 ::: estListeVide(lst:'Liste') -> bool                   Coût CST
3 ::: longueur(lst:'Liste')  -> int                       Coût CST
4 ::: ieme(lst:'Liste Non Vide', i:int) -> 'Elément'      Coût CST
5 ::: insererFin(lst:'Liste', elt:'Elément') -> None      Coût CST
6 ::: supprimerFin(lst:'Liste Non Vide')  -> 'Elément'    Coût CST
 
Description d'autres fonctions'
------------------------------
 
6 ::: inserer(lst:'Liste', elt:'Elément', i:int) -> None   Coût LIN en θ(n-i)
7 ::: supprimer(lst:'Liste Non Vide', i:int)  -> 'Elément' Coût' LIN en θ(n-i)
8 ::: representerListe(lst:'Liste') -> str
 
'''
 
def nouvelleListe() -> 'Liste':
    '''Renvoie une liste vide'''
    return []
 
def estListeVide(lst:'Liste') -> bool:
    '''Renvoie True si la liste est vide'''
    return lst == []
 
def longueur(lst:'Liste') -> int:
    '''Renvoie le nombre de cases utilisées dans le tableau'''
    return len(lst)
 
def ieme(lst:'Liste Non Vide', i:int):
    '''Renvoie la valeur stockée à l'indice VALIDE voulu de lst NON VIDE'''
    return lst[i]
 
def insererFin(lst:'Liste', elt:'Elément') -> None:
    '''Modifie en place la liste en insérant l'élément en fin de liste'''
    lst.append()
 
def supprimerFin(lst:Liste) -> Elt:
    '''Renvoie l'élément de fin supprimé dans lst NON VIDE'''
    return lst.pop()
 

def inserer(lst:'Liste', elt:'Elément', i:int) -> None:
    '''Modifie en place la liste en insérant l'élément à l'indice fourni'''
    lst.insert(i, x)
 
def supprimer(lst:Liste, i:int) -> Elt:
    '''Renvoie l'élément supprimé à l'indice VALIDE dans lst NON VIDE'''
    return lst.pop(i)
 
def representerListe(lst:Liste):
    '''Renvoie une représentation de la Liste sous forme d'une séquence commençant par la tête'''
    return str(lst).replace(',',' -> ').replace('[','').replace(']','')
