Tenir compte de la liste suivante:Créer deux listes linéaires à partir d'une liste circulaire conceptuelle en python
>>> circle = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> list(enumerate(circle))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h')]
Si circle
est conceptualisée comme une liste circulaire c.-à-circle[0]
est connecté à circle[7]
, étant donné un indice start
et un indice end
où start != end
, Je veux construire deux listes qui représentent des ordres de traversée linéaire dans le sens des aiguilles d'une montre et dans le sens inverse des aiguilles d'une montre.
En fonction des valeurs de start
et end
, voici ce que je suis venu avec:
Cas 1: start < end
>>> circle = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> start, end = 1, 6
>>> clockwise = circle[start:end+1]
>>> clockwise
['b', 'c', 'd', 'e', 'f', 'g']
>>> counter_clockwise = circle[start::-1] + circle[:end-1:-1]
>>> counter_clockwise
['b', 'a', 'h', 'g']
Cas n ° 2: start > end
>>> circle = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> start, end = 6, 1
>>> clockwise = circle[start:] + circle[:end+1]
>>> clockwise
['g', 'h', 'a', 'b']
>>> counter_clockwise = circle[start:end-1:-1]
>>> counter_clockwise
['g', 'f', 'e', 'd', 'c', 'b']
Y at-il un pythonique/plus efficace/plus facile de construire ces deux listes?
Je n'ai pas de réponse exacte pour vous, mais Numpy (http://www.numpy.org/) a un tas de fonctionnalités utiles dans leur implémentation de tableau. – Xorgon
@Xorgon Désolé, pas autorisé à utiliser Numpy. – veritasium42