Lors de la manipulation d'une plage de listes Python
int_list[10:2]
C'est un objet slice qui est en fait passé à la méthode __get__
, mais lorsque vous essayez d'implémenter une classe de type liste par vous-même, c'est un problème si vous essayez de correspondre à l'argument slice. Il n'existe aucune méthode pour convertir la tranche en une colonne de numéros d'index.
Il est difficile d'écrire un tel processus de conversion par vous-même, si step est un nombre négatif / None, si start ou stop est un nombre négatif / None, cela mourra dans une tempête de branchement conditionnel.
Cependant, il existe des méthodes qui effectuent ce traitement compliqué de manière discrète. C'est slice.indices ()
. Si vous donnez la longueur de la liste, cela normalisera le nombre négatif / Aucun à un numéro d'index approprié en conséquence. Avec cela, il est relativement facile d'obtenir une colonne de numéros d'index.
def iterate_by_slice(s: slice, length: int):
i, stop, step = s.indices(length)
if step > 0 :
while i < stop:
yield i
i += step
else:
while i > stop:
yield i
i += step
Veuillez créer de plus en plus de classes de type liste utiles à tout le monde.
Recommended Posts