Erhalten Sie eine Liste mit Zeichenfolgenelementen, wobei Elemente, denen ein anderes Element vorangestellt ist, aus der ursprünglichen Liste @ ausgeschlossen sin

Ich habe Probleme beim Filtern einer Liste von Zeichenfolgen. Ich habe eine ähnliche Frage gefundenHie aber es ist nicht das, was ich brauche.

Die Eingabeliste lautet:

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

und das erwartete Ergebnis ist

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

Die Reihenfolge der Elemente im Ergebnis ist nicht wichtig

Die Filterfunktion muss schnell sein, da die Liste groß ist

Meine aktuelle Lösung ist

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)) 

BEARBEITE

Nach mehreren Tests mit großen Eingabedaten, Liste mit 1500000 Zeichenfolgen, ist meine beste Lösung dafür:

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

wofür die Ausführungszeit etwa 213 Sekunden beträgt

Sample imput data - Jede Zeile ist eine Zeichenfolge in Liste

Antworten auf die Frage(18)

Ihre Antwort auf die Frage