Quand utiliser l'affectation de tranches ou l'affectation directe dans les listes Python ?

DDD
Libérer: 2024-10-19 08:08:30
original
347 Les gens l'ont consulté

When to Use Slice Assignment vs. Direct Assignment in Python Lists?

Comprendre la différence entre l'affectation de tranches et l'affectation directe dans les listes

En Python, l'affectation de tranches permet une manipulation efficace des éléments d'une liste. Bien qu'il soit couramment utilisé avec des index autres que ceux par défaut, son utilisation avec des index de tranche tels que a_list[:] = ['foo', 'bar'] peut prêter à confusion par rapport à une affectation directe comme a_list = ['foo', 'bar'. '].

Affectation directe

a_list = ['foo', 'bar'] crée une nouvelle liste en mémoire, en l'attribuant à la variable a_list. Cette action écrase toutes les données existantes dans a_list et la liste d'origine est supprimée.

Affectation des tranches

a_list[:] = ['foo', 'bar'] est plus nuancé. Cela implique d'appeler la méthode __setitem__ de l'objet a_list avec une tranche (représentant les indices 0 à len(a_list) - 1) comme index. La valeur fournie est également une liste, créée en mémoire.

La méthode __setitem__ alors :

  • Détermine la plage d'indices représentée par la tranche.
  • Itère sur la liste de valeurs.
  • Définit chaque index dans la plage spécifiée sur la valeur correspondante dans la liste de valeurs.

Différences clés

  • Objet existant : L'affectation de tranche nécessite qu'un objet existant soit pointé vers une_list, tandis que l'affectation directe crée un nouvel objet.
  • Modification d'objet : L'affectation de tranche modifie l'objet pointé par a_list, tandis que l'affectation directe pointe a_list vers un nouvel objet.
  • Méthodes de prise en charge : L'affectation de tranche nécessite que l'objet prenne en charge __setitem__ avec des indices de tranche.
  • Stockage temporaire de la valeur : La valeur dans l'affectation de tranche est stockée temporairement et peut être récupérée après l'itération. En affectation directe, il n'existe pas de stockage temporaire de ce type.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal