suppression sélective des membres de la liste

Oct 18 2020

J'ai une liste et je dois supprimer certains membres de la liste.

lis = {f1,a,b,c,d,f2,e,g,h,i,f1,j,k,l,m,f2,n,o}

Je dois supprimer chaque occurrence de f1 et les deux éléments suivants, et supprimer chaque occurrence de f2 et de l'élément suivant. (f1 et f2 seront toujours séparés d'au moins deux éléments). Cela donne:

res = {c,d,g,h,i,l,m,o}

ReplaceList semble utile, mais je ne peux pas le voir. Merci pour vos suggestions.

Réponses

7 kglr Oct 18 2020 at 06:37

SequenceReplace

SequenceReplace[{f1, _, _} | {f2, _} -> Nothing] @ lis
{c, d, g, h, i, l, m, o}

Split+ ReplaceAll

ReplaceAll[{{f1, _, _, a___} | {f2, _, a___} :> a}] @
 Split[lis, #2 =!= f1 && #2 =!= f2 &]
{c, d, g, h, i, l, m, o}