Python elimina las subcadenas de la lista de cadenas

Tengo una list l=['abc','abcdef','def','defdef','polopolo'] intentando eliminar cadenas cuya cadena list l=['abc','abcdef','def','defdef','polopolo'] ya está en la lista. En este caso, el resultado debe ser:

['abcdef','defdef','polopolo']

He escrito el código:

 l=['abc','abcdef','def','defdef','polopolo'] res=['abc','abcdef','def','defdef','polopolo'] for each in l: l1=[x for x in l if x!=each] for other in l1: if each in other: res.remove(each) 

pero no parece funcionar He leído que no podemos eliminar de la lista mientras iteramos sobre ella. De ahí la copia de resolución, mientras que l es mi lista original. Gracias por adelantado.

     l=['abc','abcdef','def','defdef','polopolo'] print [j for i, j in enumerate(l) if all(j not in k for k in l[i + 1:])] # ['abcdef', 'defdef', 'polopolo'] 

    Podemos acelerarlo muy poco, ordenando la lista antes

     l = sorted(l, key = len) print [j for i, j in enumerate(l) if all(j not in k for k in l[i + 1:])] 

    Como @Ashwini Chaudhary menciona en los comentarios , si desea conservar las cadenas duplicadas, puede hacer esto

     l = ['abc','defghi' 'abcdef','def','defdef','defdef', 'polopolo'] l = sorted(l, key = len) print [j for i,j in enumerate(l) if all(j == k or (j not in k) for k in l[i+1:])] # ['defdef', 'defdef', 'polopolo', 'defghiabcdef']