Obtenga una lista que contenga elementos de cadena que excluyan elementos prefijados con cualquier otro elemento de la lista inicial

Tengo algunos problemas para filtrar una lista de cadenas. Encontré una pregunta similaraquí Pero no es lo que necesito.

La lista de entrada es:

l = ['ab', 'xc', 'abb', 'abed', 'sdfdg', 'abfdsdg', 'xccc']

y el resultado esperado es

['ab', 'xc', 'sdfdg']

El orden de los elementos en el resultado no es importante.

La función de filtro debe ser rápida porque el tamaño de la lista es grande

Mi solución actual es

l = ['ab', 'xc', 'abb', 'abed', 'sdfdg', 'abfdsdg', 'xccc']
for i in range(0, len(l) - 1):
    for j in range(i + 1, len(l)):
        if l[j].startswith(l[i]):
            l[j] = l[i]
        else:
            if l[i].startswith(l[j]):
                l[i] = l[j]

print list(set(l)) 

EDITAR

Después de múltiples pruebas con una gran entrada de datos, lista con 1500000 cadenas, mi mejor solución para esto es:

def filter(l):
    if l==[]:
        return []
    l2=[]
    l2.append(l[0])
    llen = len(l)
    k=0
    itter = 0
    while k<llen:
        addkelem = ''
        j=0
        l2len = len(l2)
        while j<l2len:
            if (l2[j].startswith(l[k]) and l[k]!= l2[j]):
                l2[j]=l[k]
                l.remove(l[k])
                llen-=1
                j-=1
                addkelem = ''
                continue
            if (l[k].startswith(l2[j])):
                addkelem = ''
                break
            elif(l[k] not in l2):
                addkelem = l[k]
            j+=1
        if addkelem != '':
            l2.append(addkelem)
            addkelem = ''
        k+=1
    return l2

para lo cual el tiempo de ejecución es de alrededor de 213 segundos

Muestra de datos de entrada - cada línea es una cadena en la lista

Respuestas a la pregunta(9)

Su respuesta a la pregunta