Antworten:
Diese einfache Filterung kann mit Python auf viele Arten erreicht werden. Der beste Ansatz besteht darin, "Listenverständnis" wie folgt zu verwenden:
>>> lst = ['a', 'ab', 'abc', 'bac']
>>> [k for k in lst if 'ab' in k]
['ab', 'abc']
Eine andere Möglichkeit besteht darin, die filterFunktion zu verwenden. In Python 2:
>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
In Python 3 wird anstelle einer Liste ein Iterator zurückgegeben , aber Sie können ihn umwandeln:
>>> list(filter(lambda k: 'ab' in k, lst))
['ab', 'abc']
Es ist jedoch besser, ein Verständnis zu verwenden.
lambdader perfekte Begleiter filter? Ich denke, dass das Schreiben einer separaten Funktion nur zum Überprüfen, ob sie abin der angegebenen Liste enthalten ist, ein Overkill ist. Schreiben Sie also eine allgemeinere Funktion, die den inOperator grundsätzlich umschließt . Wie würden Sie filterohne lambdahier klarer verwenden ?
[x for x in L if 'ab' in x]
# To support matches from the beginning, not any matches:
items = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'
filter(lambda x: x.startswith(prefix), items)
Versuchte dies schnell in der interaktiven Shell:
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
Warum funktioniert das? Weil der inOperator so definiert ist, dass Zeichenfolgen bedeuten: "ist Teilzeichenfolge von".
Möglicherweise möchten Sie auch die Schleife ausschreiben, anstatt die oben verwendete Listenverständnis-Syntax zu verwenden:
l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
if 'ab' in s:
result.append(s)
mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist