In Ihrem Beispiel, müssen Sie nicht find
in der Liste verwenden, weil:
- Sie wirklich den Index nicht benötigen, so dass Sie nur
if "a" in l
find
oder sogar in
in einem list
verwenden könnten hat eine lineare (O (n)) Komplexität, so ist dies nicht optimal. Nicht auf einer kleinen Liste zu bemerken, aber mit einer Million Elemente ist es.
mit hat lineare Komplexität und Schleife auf die gesuchten Elemente anstelle der Liste selbst.
in einem set
, Elemente sind Hashed (und müssen dann eindeutig sein), wodurch eine viel bessere Suchleistung (und fügen Sie die Leistung zu, aber das ist nicht der Punkt).
l= set(['a','b','c','d','e','f'])
m=list()
for i in ['a','b','z','c']: # I have introduced an extra element
if i in l:
m.append(i)
print(m)
Ergebnis:
['a', 'b', 'c']
Was lustig ist, ist der obige Code ist, dass es mit einem set
arbeitet aber mit einem list
weil in
von allen Sammlungsobjekten gemeinsam genutzt wird. Nur die Leistung variiert. Sie könnten die erste Zeile durch l= ['a','b','c','d','e','f']
ersetzen es würde funktionieren, aber Sie werden schlechte Leistung bekommen (na ja, nicht für 6 Elemente, natürlich), genau wie Ihr Beispiel in der Frage.
Beweis für Leute, die immer noch an der Macht des set
Objekts zweifeln, hier ist ein Test, um zu überprüfen, ob das Element in der Liste ist. Ich habe den schlechtesten Fall für list
gewählt, aber kann mit einem anderen Wert gemacht werden.
import time
data=range(1000000)
start_time = time.time()
for i in range(1,1000):
999999 in data
print("list elapsed %f" % (time.time()-start_time))
data=set(data)
start_time = time.time()
for i in range(1,1000):
999999 in data
print("set elapsed %f" % (time.time()-start_time))
Ergebnis:
list elapsed 17.284000
set elapsed 0.000000
nicht einmal in der Nähe :) und Sie können den gesuchten Wert zu reduzieren, der list
Wert sinken (aber die set
zeigt immer 0)
bitte posten a [ mcve]. Sie haben 'list l = [a, b, c, d, e, f, g, h, i]' mit fehlenden Anführungszeichen angegeben und Sie haben nicht genau erklärt, was Sie wollen. Ist die Eingabeliste sortiert? Sollen die Ausgabelisten auch sortiert werden? vage. –
Entschuldigung für die fehlenden Anführungszeichen! .Ausgangsliste kann nicht sortiert werden, ich möchte nur Eingänge in Liste l zu verschiedenen Listen gruppieren. – PythonDev
können Sie Ihre Frage dann bearbeiten. –