Je suis à la recherche d'une méthode «agréable» pour traiter une liste où certains éléments doivent être développés en plusieurs éléments (une seule fois, pas d'expansion sur les résultats).Expansion d'éléments dans une liste
manière itérative standard serait de le faire:
i=0
while i < len(l):
if needs_expanding(l[i]):
new_is = expand(l[i])
l[i:i] = new_is
i += len(new_is)
else:
i += 1
qui est assez laid. Je pourrais réécrire le contenu dans une nouvelle liste avec:
nl = []
for x in l:
if needs_expanding(x):
nl += expand(x)
else:
nl.append(x)
Mais ils semblent tous les deux trop longs. Ou je pourrais simplement faire 2 passes et aplatir la liste plus tard:
flatten(expand(x) if needs_expanding(x) else x for x in l)
# or
def try_expanding(x)....
flatten(try_expanding(x) for x in l)
mais cela ne se sent pas « droit » non plus.
Existe-t-il d'autres façons claires de le faire?
Je pense que la 2ème version est assez claire. – kennytm
@KennyTM: J'utiliserais normalement le dernier. Je voulais juste voir ce que les autres pourraient trouver/serait à l'aise d'utiliser/voir dans le code de la vie réelle. – viraptor