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