Biorąc pod uwagę listę ['a','ab','abc','bac']
, chcę obliczyć listę z ciągami, które mają w sobie 'ab'
. To znaczy. wynikiem jest ['ab','abc']
. Jak to zrobić w Pythonie?Filtrowanie listy łańcuchów na podstawie zawartości
Odpowiedz
To proste filtrowanie można osiągnąć na wiele sposobów z Pythona. Najlepszym rozwiązaniem jest użycie "listowych" w następujący sposób:
>>> lst = ['a', 'ab', 'abc', 'bac']
>>> res = [k for k in lst if 'ab' in k]
>>> res
['ab', 'abc']
>>>
Innym sposobem jest użycie filter
funkcję:
>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
>>>
-1: Lambda. Proszę nie zadawać lambda na n00bs. –
@ S.Lott: dlaczego? Co jest złego w uczeniu się przydatnych tematów programowania zaawansowanego w odpowiednim kontekście? –
@Edi Bendersky: Bo są bardziej zagmatwane niż użyteczne? Ponieważ prowadzi to do pytań, na które odpowiada "użyj def"? Ponieważ rzadko prowadzi do czegoś lepszego niż kod golfa? Nie wiem, wydają mi się bezużyteczne po 30 latach programowania w wielu różnych językach. Ale myślę, że są dla ciebie naprawdę ważne. –
[x for x in L if 'ab' in x]
wygrywasz przez 48 sekund :-) –
Tried to się szybko w interaktywnej powłoki:
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
Dlaczego to działa? Ponieważ in
operator jest zdefiniowany dla łańcuchów oznaczających: "jest podciągiem".
Ponadto, warto rozważyć wypisywanie pętlę w przeciwieństwie do korzystania z list comprehension syntax używany powyżej:
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
# To support matches from the beginning, not any matches:
list = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'
filter(lambda x: x.startswith(prefix), list)
- 1. Filtrowanie/kwerendowanie według zawartości listy w DynamoDB
- 2. filtrowanie tablicy łańcuchów znaków
- 3. Filtrowanie listy NG-repeat na podstawie właściwości sub-obiektowego
- 4. Algorytm szacowania szerokości tekstu na podstawie zawartości
- 5. Symfony: filtrowanie przestarzałych alertów na podstawie pakietów
- 6. ElasticSearch: filtrowanie dokumentów na podstawie długości pola?
- 7. Filtrowanie właściwości obiektu na podstawie wartości
- 8. Filtrowanie ciągu znaków na podstawie liczby słów
- 9. AngularJS - złożone filtrowanie na podstawie kategorii itp.
- 10. Prolog: Filtrowanie listy?
- 11. Sortowanie listy na podstawie innej listy
- 12. Rozmiary okna SmartGWT na podstawie zawartości
- 13. filtrowanie danych na podstawie niestandardowego atrybutu danych przy użyciu jquery
- 14. Filtrowanie listy Pythona z argumentami
- 15. Filtrowanie listy nieskończoną w Haskell
- 16. Bindowanie danych WPF: włączyć/wyłączyć sterowanie na podstawie zawartości var?
- 17. Filtrowanie wierszy na podstawie liczby kolumn z AWK
- 18. Filtrowanie Tablica obiektów z lodash na podstawie wartości nieruchomości
- 19. Filtrowanie wierszy na podstawie warunków z wieloma kolumnami R
- 20. Sortuj 2 listy w Pythonie na podstawie proporcji poszczególnych odpowiednich elementów lub na podstawie trzeciej listy
- 21. Filtrowanie dużej listy po stronie klienta
- 22. JQGrid: Dynamicznie ustawiam komórkę na nieedytowalną na podstawie zawartości
- 23. List.Contains na podstawie właściwości pozycji listy
- 24. listy wyrwy na podstawie typu struct zmieniającym
- 25. Powróć podzbiór na podstawie listy wartości logicznych
- 26. Zagnieżdżanie płaskiej listy na podstawie dowolnego kryterium
- 27. Jak scalić dwie listy na podstawie właściwości?
- 28. Wybierz Pandas wiersze na podstawie indeksu listy
- 29. Metoda LINQ do sortowania listy na podstawie większej listy
- 30. Funkcje procesu z listy łańcuchów w Pythonie
dzięki Eli Bendersky –
Zważywszy na listy [” a ',' b ',' c ',' a ',' b '], chcę obliczyć listę z łańcuchami, które mają w sobie "a" i "b". To znaczy. wynikiem jest ["a", "b"]. Jak to zrobić w Pythonie? –