Techniques avancées des pas négatifs
Stratégies complexes des pas négatifs
Les pas négatifs en Python offrent des moyens sophistiqués de manipuler les séquences au-delà de l'itération de base.
Génération dynamique de plages (ranges)
Pas négatifs conditionnels
## Generate dynamic ranges based on conditions
def custom_negative_range(start, stop, condition):
current = start
while current > stop:
if condition(current):
yield current
current -= 1
## Example: Even numbers in reverse
even_reverse = list(custom_negative_range(20, 0, lambda x: x % 2 == 0))
print(even_reverse)
Pas négatifs multi-dimensionnels
Parcours de matrices
## Reverse matrix traversal
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
## Traverse matrix diagonally in reverse
for i in range(len(matrix)-1, -1, -1):
for j in range(len(matrix[i])-1, -1, -1):
print(matrix[i][j], end=' ')
Technique |
Complexité |
Cas d'utilisation |
Inversion par tranche (Slice Reversal) |
O(1) |
Inversion rapide de liste |
Plage négative (Negative Range) |
O(n) |
Itération contrôlée |
reversed() |
O(1) |
Inversion simple |
Manipulation avancée des itérateurs
Itérateur personnalisé avec pas négatifs
class ReverseIterator:
def __init__(self, data, step=-1):
self.data = data
self.step = step
self.index = len(data) - 1 if step < 0 else 0
def __iter__(self):
return self
def __next__(self):
if self.index < 0 or self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
self.index += self.step
return value
## Usage
custom_iter = ReverseIterator([1, 2, 3, 4, 5])
print(list(custom_iter))
Visualisation des pas avancés
graph TD
A[Début] --> B{Condition}
B -->|Vrai| C[Traiter l'élément]
B -->|Faux| D[Sauter]
C --> E[Passer au suivant]
D --> E
E --> F{Fin de la séquence}
Applications pratiques
- Filtrage complexe de données
- Ingénierie inverse (Reverse engineering) d'algorithmes
- Manipulations de séquences critiques pour les performances
LabEx encourage l'exploration de ces techniques avancées pour exploiter tout le potentiel de Python.