Je souhaite faire cette opération pour le cas où la condition est bien plus complexe que ça et dépend de calculs effectués dans la boucle.
Et bien tu peux déclarer ta grosse fonction avant, et l'utiliser dans la list comprehension : def ma_grosse_fonction(x): # qui renvoie si l'élément est bon / pas bon
...
maliste = [ el for el in maliste if ma_grosse_fonction]
Ce que je voulais dire par "éviter de passer par une liste temporaire", c'était plutôt dans l'idée "éviter de déclarer une autre liste pour soit l'utiliser comme copie soit faire des append dedans". Que python le fasse tout seul, y a pas de lézard.
Mouai, ça me permet pas un argument terrible, surtout si c'est pour se mettre à faire des trucs crades. Et puis déjà, rien qu'en voyant que tu utilises la même variable pour désigner deux choses différentes (la liste avant filtrage, et après filtrage), j'ai un feeling un peu "bof bof". Oui, on peut modifier des variables, mais quand elles représentent vraiment deux choses différentes, je préfère en faire deux.
Et puis tiens, encore une autre manière de faire : def mon_traitement(maliste):
for el in maliste:
if condition1:
....
continue # l'élément ne respecte pas ma première condition
if condition2:
yield el # j'ai envie d'inclure ceux qui respectent la condition 2
...
Qui te permettera de faire, là où tu utilises la liste résultante : for el in mon_traitement(maliste):
# j'utilise les éléments filtrés de maliste
Tout en effectuant le filtrage au fur et à mesure seulement, pas d'un coup comme tu le fais si tu filtres tout d'abord. C'est utile quand tu as une grosse liste, ou que le traitement de filtrage ferait que ce serait trop lourd de tout faire au début.
Enfin, je ne connaissais pas l'ABAP, mais ça m'a permis de voir un autre style de programmation ... mais bon, je préfère toujours python !
[^] # Re: Explications
Posté par benoar . En réponse au message Supprimer l'élément en cours d'une liste. Évalué à 3.
Et bien tu peux déclarer ta grosse fonction avant, et l'utiliser dans la list comprehension :
def ma_grosse_fonction(x): # qui renvoie si l'élément est bon / pas bon
...
maliste = [ el for el in maliste if ma_grosse_fonction]
Ce que je voulais dire par "éviter de passer par une liste temporaire", c'était plutôt dans l'idée "éviter de déclarer une autre liste pour soit l'utiliser comme copie soit faire des append dedans". Que python le fasse tout seul, y a pas de lézard.
Mouai, ça me permet pas un argument terrible, surtout si c'est pour se mettre à faire des trucs crades. Et puis déjà, rien qu'en voyant que tu utilises la même variable pour désigner deux choses différentes (la liste avant filtrage, et après filtrage), j'ai un feeling un peu "bof bof". Oui, on peut modifier des variables, mais quand elles représentent vraiment deux choses différentes, je préfère en faire deux.
Et puis tiens, encore une autre manière de faire :
def mon_traitement(maliste):
for el in maliste:
if condition1:
....
continue # l'élément ne respecte pas ma première condition
if condition2:
yield el # j'ai envie d'inclure ceux qui respectent la condition 2
...
Qui te permettera de faire, là où tu utilises la liste résultante :
for el in mon_traitement(maliste):
# j'utilise les éléments filtrés de maliste
Tout en effectuant le filtrage au fur et à mesure seulement, pas d'un coup comme tu le fais si tu filtres tout d'abord. C'est utile quand tu as une grosse liste, ou que le traitement de filtrage ferait que ce serait trop lourd de tout faire au début.
Enfin, je ne connaissais pas l'ABAP, mais ça m'a permis de voir un autre style de programmation ... mais bon, je préfère toujours python !