317 votes

Concaténation de deux listes - différence entre '+=' et extend()

J'ai vu qu'il y avait en fait deux façons (peut-être plus) de concaténer des listes en Python :

L'une des solutions consiste à utiliser la fonction extend() méthode :

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

l'autre pour utiliser l'opérateur plus (+) :

b += a

Maintenant je me demande : laquelle de ces deux options est la façon "pythonique" de faire de la concaténation de listes et y a-t-il une différence entre les deux ? (J'ai consulté le tutoriel officiel de Python mais je n'ai rien trouvé à ce sujet).

1 votes

La différence a peut-être plus d'implications lorsqu'il s'agit de faire du ducktyping et si votre peut-être pas vraiment une liste mais comme une liste soutiens .__iadd__() / .__add__() / .__radd__() par rapport à .extend()

1voto

Jann Poppinga Points 354

Seul .extend() peut être utilisé lorsque la liste est un tuple

Cela fonctionnera

t = ([],[])
t[0].extend([1,2])

alors que ce ne sera pas le cas

t = ([],[])
t[0] += [1,2]

La raison en est que += génère un nouvel objet. Si vous regardez la version longue :

t[0] = t[0] + [1,2]

vous pouvez voir comment cela changerait l'objet qui se trouve dans le tuple, ce qui n'est pas possible. L'utilisation de .extend() modifie un objet du tuple, ce qui est autorisé.

-1voto

littlebear333 Points 107

Selon le document Python pour l'analyse des données.

"Notez que la concaténation de listes par addition est une opération relativement coûteuse puisqu'une nouvelle liste doit être créée et que les objets doivent être copiés. Il est généralement préférable d'utiliser extend pour ajouter des éléments à une liste existante, en particulier si vous construisez une grande liste. " Ainsi,

everything = []
for chunk in list_of_lists:
    everything.extend(chunk)

est plus rapide que l'alternative concaténative :

everything = []
for chunk in list_of_lists:
    everything = everything + chunk

enter image description here enter image description here

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