Quelle est la différence entre les méthodes de la liste append()
et extend()
?
Réponses
Trop de publicités?Un point intéressant qui a été suggéré, mais pas expliqué, est que extend est plus rapide que append. Toute boucle contenant append devrait être remplacée par list.extend(processed_elements).
N'oubliez pas que l'apprentissage de nouveaux éléments peut entraîner le déplacement de la liste entière vers un meilleur emplacement en mémoire. Si cela est fait plusieurs fois parce que nous ajoutons un élément à la fois, les performances globales en souffrent. En ce sens, list.extend est analogue à "".join(stringlist).
Append ajoute l'ensemble des données en une seule fois. L'ensemble des données sera ajouté à l'index nouvellement créé. D'autre part, extend
comme son nom l'indique, étend le tableau actuel.
Par exemple
list1 = [123, 456, 678]
list2 = [111, 222]
Avec append
on obtient :
result = [123, 456, 678, [111, 222]]
Alors que sur extend
on obtient :
result = [123, 456, 678, 111, 222]
Un dictionnaire anglais définit les mots append
et extend
comme :
ajouter : ajouter (quelque chose) à la fin d'un document écrit.
étendre : rendre plus grand. Agrandir ou élargir
Avec cette connaissance, comprenons maintenant
1) La différence entre append
et extend
append
:
- Ajoute tout objet Python tel quel à la fin de la liste (c'est-à-dire comme un le dernier élément de la liste).
- La liste résultante peut être imbriquée et contenir des éléments hétérogènes (par exemple, liste, chaîne de caractères, tuple, dictionnaire, ensemble, etc.)
extend
:
- Accepte tout itérable comme argument et rend la liste plus grand .
- La liste résultante est toujours une liste unidimensionnelle (c'est-à-dire sans imbrication) et elle peut contenir des éléments hétérogènes (par exemple des caractères, des entiers, des flottants) suite à l'application de la méthode
list(iterable)
.
2) Similitude entre append
et extend
- Les deux prennent exactement un argument.
- Les deux modifient la liste en place .
- Par conséquent, les deux rendements
None
.
Exemple
lis = [1, 2, 3]
# 'extend' is equivalent to this
lis = lis + list(iterable)
# 'append' simply appends its argument as the last element to the list
# as long as the argument is a valid Python object
list.append(object)
J'espère pouvoir apporter un complément utile à cette question. Si votre liste stocke un objet de type spécifique, par exemple Info
voici une situation dans laquelle extend
ne convient pas : Dans un for
et en générant une Info
à chaque fois et en utilisant extend
pour le stocker dans votre liste, il échouera. L'exception est comme ci-dessous :
TypeError : L'objet 'Info' n'est pas itérable.
Mais si vous utilisez le append
le résultat est correct. Parce qu'à chaque fois que l'on utilise la méthode extend
il la traitera toujours comme une liste ou tout autre type de collection, l'itérera et la placera après la liste précédente. Un objet spécifique ne peut pas être itéré, évidemment.
Pour les distinguer intuitivement
l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l1.append(l2)
l1
['a', 'b', 'c', ['d', 'e', 'f']]
C'est comme si l1
reproduire un corps à l'intérieur de son corps (imbriqué).
# Reset l1 = ['a', 'b', 'c']
l1.extend(l2)
l1
['a', 'b', 'c', 'd', 'e', 'f']
C'est comme si deux individus séparés se mariaient et construisaient une famille unie.
En outre, j'ai établi une liste exhaustive de toutes les méthodes de la liste pour votre référence.
list_methods = {'Add': {'extend', 'append', 'insert'},
'Remove': {'pop', 'remove', 'clear'}
'Sort': {'reverse', 'sort'},
'Search': {'count', 'index'},
'Copy': {'copy'},
}