Python >> Tutoriel Python >  >> Python

Affectation de tranche Python

L'affectation de tranches est une belle fonctionnalité Python peu utilisée pour remplacer une tranche par une autre séquence. Sélectionnez simplement la tranche que vous souhaitez remplacer sur la gauche et les valeurs pour la remplacer sur le côté droit de l'équation. Par exemple, l'affectation de tranche list[2:4] = [42, 42] remplace les éléments de la liste par l'index 2 et 3 avec la valeur 42 .

>>> lst = [1, 2, 3, 4, 5]
>>> # Slicing
>>> lst[2:4]
[3, 4]
>>> # Slice Assignment
>>> lst[2:4] = ['Alice', 'Bob']
>>> lst
[1, 2, 'Alice', 'Bob', 5]
>>> lst[2:4]
['Alice', 'Bob']

J'ai enregistré une vidéo rapide qui vous montre comment la fonction d'affectation de tranches fonctionne dans un Python One-Liner :

Jouez avec l'attribution de tranches dans votre shell interactif

Avant que je ne vous l'explique, n'hésitez pas à jouer vous-même avec cette fonctionnalité :

Un de mes utilisateurs Finxter, Mike , a posé l'excellente question suivante :

"J'étais en train de résoudre de nombreuses énigmes sur le site Finxter, je suis tombé sur ceci :

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
letters[1:] = [ ]
print(letters)

Au départ, j'ai répondu ['b', 'c', 'd', 'e', ​​'f', 'g'] mais je me suis trompé."

C'est le point où je veux ouvrir votre lacune de connaissances :quelle est la sortie de ce puzzle à la place ?

** Pour votre commodité, vous pouvez également résoudre ce puzzle spécifique sur l'application Finxter ici. **

"Comme la réponse est ['a'], je suis immédiatement devenu curieux parce que ce n'est [pas] la réponse si nous utilisons ce code

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(letters[1:])
# ['b', 'c', 'd', 'e', 'f', 'g']

Pourquoi cela fonctionne-t-il différemment ?
Merci, j'apprécie vraiment votre temps et tout le contenu que vous fournissez chaque jour."

Encore une fois, excellente question. Mick a fait la plupart du travail lourd lui-même. La réponse est simple (si vous avez déjà lu mon livret de tranchage) :

  • La première version est l'affectation de tranches .
  • La deuxième version est le tranchage de base .

Ils ne sont pas les mêmes. Vous ne devez pas confondre découpage et affectation de tranches. Voici la différence :

1) S licing crée une nouvelle sous-séquence de la séquence d'origine. Vous peut attribuer cette nouvelle séquence à une variable y. Essentiellement, vous écrasez toute valeur précédente de la variable y :

x = list("coffeebreak")
y = list("python")

y = x[0:4]
print(''.join(y))
# 'coff'

2) Affectation des tranches remplace la tranche sélectionnée dans la séquence d'origine y par la valeur spécifiée sur le côté droit de l'équation :

x = list("coffeebreak")
y = list("python")

y[0:2] = x
print(''.join(y))
# 'coffeebreakthon'

Notez que les deux extraits de code montrent également comment vous pouvez convertir une chaîne en liste et reconvertir une liste en chaîne.


Cette leçon Python est basée sur ma série d'e-mails gratuite "Coffee Break Python". Rejoignez-nous. C'est marrant! ?