Aller au contenu

Opérations sur les objets de type list

Concaténation

On peut concaténer (ajouter bout à bout) deux tableaux avec l'opérateur + et ainsi créer un nouveau tableau :

>>> a = [7, 2, 1789, 42]

>>> b = [666, 2022]

>>> c = a + b

>>> c
[7, 2, 1789, 42, 666, 2022]

Comme pour la concaténation de chaînes de caractères, la concaténation de tableaux n'est pas commutative :

>>> a = [7, 2, 1789, 42]

>>> b = [666, 2022]

>>> c = b + a

>>> c
[666, 2022, 7, 2, 1789, 42]

Attention

L'opérateur + ne peut pas agir sur un tableau et un entier (ou un autre objet qui n'est pas de type list) : cela provoque une erreur.

Remarque

La concaténation crée bien un nouvel objet de type list.
Ainsi, dans le code suivant :

1
2
3
4
5
6
7
8
>>> a = [7, 2, 1789, 42]

>>> b = [666, 2022]

>>> a = a + b

>>> a
[7, 2, 1789, 42, 666, 2022]

on n'a pas modifié le tableau [7, 2, 1789, 42] initial même si le nouveau tableau porte l'étiquette a.

  • En ligne 1, on crée l'objet [7, 2, 1789, 42] puis on lui « colle » l'étiquette a.
  • En ligne 3, on crée l'objet [666, 2022] puis on lui colle l'étiquette b.
  • En ligne 5, on concatène les deux tableaux étiquetés a et b : on crée ainsi un nouvel objet de type list [7, 2, 1789, 42, 666, 2022].
    On « décolle » ensuite l'étiquette a de son ancien objet pour venir la coller sur ce nouvel objet (à ce stade, l'objet [7, 2, 1789, 42] n'est plus étiqueté : il n'est donc plus accessible).

Répétition

On peut répéter (ajouter bout à bout plusieurs fois) un tableau en le multipliant par un entier avec l'opérateur * :

>>> tab = [100]*6

>>> tab
[100, 100, 100, 100, 100, 100]

La multiplication par l'entier peut s'effectuer avant ou après le tableau :

>>> tab = 6*[100]

>>> tab
[100, 100, 100, 100, 100, 100]

Prolonger un tableau

On peut prolonger un tableau, c'est-à-dire lui incorporer un élément supplémentaire à la fin, en utilisant la méthode .append() :

>>> tab = [7, 2, 1789, 42]

>>> tab.append(666)

>>> tab
[7, 2, 1789, 42, 666]

Exemple

Définir la fonction concatene() qui prend en paramètre deux tableaux et qui renvoie un tableau contenant tous les éléments du premier suivis de tous les éléments du second.
Bien évidemment, il est interdit d'utiliser la concaténation...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def concatene(tab1, tab2):
    """
    tab1, tab2 - list
    Sortie: list – tableau contenant les éléments de tab1
            suivis des éléments de tab2
    >>> tab1 = [1, 2, 3]
    >>> tab2 = [42, 666, 777]
    >>> L = concatene(tab1, tab2)
    >>> L
    [1, 2, 3, 42, 666, 777]
    """
    pass


##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Une (bonne) solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
def concatene(tab1, tab2):
    """
    tab1, tab2 - list
    Sortie: list – tableau contenant les éléments de tab1
            suivis des éléments de tab2
    >>> tab1 = [1, 2, 3]
    >>> tab2 = [42, 666, 777]
    >>> L = concatene(tab1, tab2)
    >>> L
    [1, 2, 3, 42, 666, 777]
    """
    tab = []
    for elt in tab1:
        tab.append(elt)
    for elt in tab2:
        tab.append(elt)
    return tab
Une (mauvaise) solution

Le code ci-dessous était peut-être votre première idée :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def concatene(tab1, tab2):
    """
    tab1, tab2 - list
    Sortie: list – tableau contenant les éléments de tab1
            suivis des éléments de tab2
    >>> tab1 = [1, 2, 3]
    >>> tab2 = [42, 666, 777]
    >>> L = concatene(tab1, tab2)
    >>> L
    [1, 2, 3, 42, 666, 777]
    """
    tab = tab1
    for elt in tab2:
        tab.append(elt)
    return tab

Cependant, du fait du caractère muable des listes en Python, il va produire des effets inattendus.
Pour le constater, exécutez votre programme puis tapez les instructions suivantes dans la console :

>>> tab1 = [0, 1, 2, 3, 4]
>>> tab2 = [7, 8, 9, 10, 11, 12, 13]
>>> T = concatene(tab1, tab2)
>>> T
[0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13]

On pourait croire que tout va bien. Mais si on redemande le contenu de la variable tab1 :

>>> tab1
[0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13]
on constate que tab1 a été modifiée et qu'elle contient les les mêmes éléments que T.

Cette particularité sera expliquée dans le chapitre sur la portée des variables.