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