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 filter
Funktion 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.
lambda
der perfekte Begleiter filter
? Ich denke, dass das Schreiben einer separaten Funktion nur zum Überprüfen, ob sie ab
in der angegebenen Liste enthalten ist, ein Overkill ist. Schreiben Sie also eine allgemeinere Funktion, die den in
Operator grundsätzlich umschließt . Wie würden Sie filter
ohne lambda
hier 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 in
Operator 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