3113 votes

Quelle est la différence entre les méthodes de liste de Python append et extend ?

Quelle est la différence entre les méthodes de la liste append() et extend() ?

85voto

Giovanni Gianni Points 6186

Ajouter ou étendre

enter image description here

Avec append, vous pouvez ajouter un élément unique qui prolongera la liste :

>>> a = [1,2]
>>> a.append(3)
>>> a
[1,2,3]

Si vous voulez étendre plus d'un élément, vous devez utiliser extend, car vous ne pouvez ajouter qu'un seul élément ou une seule liste d'éléments :

>>> a.append([4,5])
>>> a
>>> [1,2,3,[4,5]]

De sorte que vous obteniez une liste imbriquée

Au lieu de cela, avec extend, vous pouvez étendre un seul élément comme ceci

>>> a = [1,2]
>>> a.extend([3])
>>> a
[1,2,3]

Ou, différemment, à partir de append, étendre plus d'éléments en une seule fois sans imbriquer la liste dans la liste d'origine (c'est la raison du nom extend).

>>> a.extend([4,5,6])
>>> a
[1,2,3,4,5,6]

Ajout d'un élément avec les deux méthodes

enter image description here

append et extend peuvent tous deux ajouter un élément à la fin de la liste, bien que append soit plus simple.

ajouter 1 élément

>>> x = [1,2]
>>> x.append(3)
>>> x
[1,2,3]

prolonger un élément

>>> x = [1,2]
>>> x.extend([3])
>>> x
[1,2,3]

Ajouter d'autres éléments... avec des résultats différents

Si vous utilisez append pour plus d'un élément, vous devez passer une liste d'éléments comme arguments et vous obtiendrez une liste NESTED !

>>> x = [1,2]
>>> x.append([3,4])
>>> x
[1,2,[3,4]]

Avec extend, au contraire, vous passez une liste comme argument, mais vous obtiendrez une liste avec le nouvel élément qui n'est pas imbriqué dans l'ancien.

>>> z = [1,2] 
>>> z.extend([3,4])
>>> z
[1,2,3,4]

Ainsi, avec plus d'éléments, vous utiliserez extend pour obtenir une liste avec plus d'éléments. Cependant, l'ajout d'une liste n'ajoutera pas plus d'éléments à la liste, mais un élément qui est une liste imbriquée comme vous pouvez clairement le voir dans la sortie du code.

enter image description here

enter image description here

66voto

Erik Points 655

Les deux extraits suivants sont sémantiquement équivalents :

for item in iterator:
    a_list.append(item)

et

a_list.extend(iterator)

Cette dernière peut être plus rapide car la boucle est implémentée en C.

48voto

CodyChan Points 185

Le site append() ajoute un seul élément à la fin de la liste.

x = [1, 2, 3]
x.append([4, 5])
x.append('abc')
print(x)
# gives you
[1, 2, 3, [4, 5], 'abc']

Le site extend() prend un argument, une liste, et ajoute chacun des éléments de l'argument à la liste originale. (Les listes sont implémentées comme des classes. "Créer une liste, c'est en fait instancier une classe. En tant que telle, une liste possède des méthodes qui opèrent sur elle).

x = [1, 2, 3]
x.extend([4, 5])
x.extend('abc')
print(x)
# gives you
[1, 2, 3, 4, 5, 'a', 'b', 'c']

De Plongez dans Python .

47voto

Ali Afshar Points 22836

Bonnes réponses, mais n'oubliez pas que n'importe quel itérable fera l'affaire pour extend (pas seulement la liste) :

l.extend(xrange(5))

41voto

denfromufa Points 174

Vous pouvez utiliser "+" pour renvoyer l'extension, au lieu de l'extension en place.

l1=range(10)

l1+[11]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11]

l2=range(10,1,-1)

l1+l2

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2]

De même, += pour le comportement en place, mais avec de légères différences par rapport à append & extend . L'une des plus grandes différences de += de append et extend c'est lorsqu'il est utilisé dans les champs d'application des fonctions, cf. cet article de blog .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X