• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python: jak sprawdzić, czy na secie jest słowo zaczynające się od, np. 'ab'?

Object Storage Arubacloud
0 głosów
550 wizyt
pytanie zadane 20 listopada 2016 w Python przez dragulaa Użytkownik (950 p.)
Jak w temacie: czy da się szybko (logarytmicznie) jakaś prostą metodą/operacją sprawdzić, czy na secie znajduje się słowo zaczynające się od jakiegos innego?

Wymyśliłem, żeby trzymac słowa na liscie i napisac binsearcha, ale zastanawiam się, czy moze nie ma czegos wbudowanego...

Przykład:
S = set(['abc','cbd', 'abba'])
dla 'ab' funkcja powinna zwracac True
dla 'cd' funkcja powinna zwracać False

1 odpowiedź

+2 głosów
odpowiedź 20 listopada 2016 przez adrian17 Ekspert (344,860 p.)
edycja 20 listopada 2016 przez adrian17

W hashsecie nie da się inaczej niż O(n). Musisz przeiterować po wszystkich elementach.

Natomiast są struktury dedykowane do takiego szybkiego szukania, np. drzewo trie (prefiksowe) https://pypi.python.org/pypi/marisa-trie

from marisa_trie import Trie
trie = Trie(['abc', 'cbd', 'abba'])

trie.has_keys_with_prefix('ab') # True
trie.has_keys_with_prefix('cd') # False

Ze złożonością O(1) na wielkość kontenera.

BTW na przyszłość:

s = set(['abc','cbd', 'abba'])
s = {'abc','cbd', 'abba'} # ladniejsze

 

komentarz 20 listopada 2016 przez dragulaa Użytkownik (950 p.)
Uuuuu ! Dzięki bardzo :) Trie jest wbudowane? O matko, ale cudnie... dopiero ucze się pythona w LO pisałem w C++, wiec ciesze się jak odkrywam co on ma jeszcze w sobie XD

A co do tego seta, to {} nie oznacza mapy?

{'Kasia': 13131412, 'Gosia': 12431412, 'Zosia': 4124141}

Co on robi wtedy, gdy nie poda mu się klucza, czy jak się tam nazywa ten drugi element?
komentarz 20 listopada 2016 przez adrian17 Ekspert (344,860 p.)

 Trie jest wbudowane?

Nie jest, trzeba doinstalować pipem (jak widać w linku wyżej)

A co do tego seta, to {} nie oznacza mapy?

{1: 2, 3: 4} # dict
{1, 2, 3, 4} # set

 

komentarz 20 listopada 2016 przez dragulaa Użytkownik (950 p.)
Faktycznie trzeba doinstalowac... za bardzo sie ucieszylem, ale i tak fajnie :P

A co do seta i dict, to tak samo to działa w pythonie 2 i 3?
komentarz 20 listopada 2016 przez adrian17 Ekspert (344,860 p.)

A co do seta i dict, to tak samo to działa w pythonie 2 i 3?

Tak.

komentarz 20 listopada 2016 przez dragulaa Użytkownik (950 p.)
A jeszcze takie pytanie: jak zrobić, żeby ten moduł działał w pythonie3? Bo po zainstalowaniu działa tylko jak w terminalu odpalam program pythonem2, a dla trójki mówi: No module named 'marisa_trie'
komentarz 20 listopada 2016 przez adrian17 Ekspert (344,860 p.)
Zamiast pip użyj pip3.

(a na dłuższą metę lepiej działać w virtualenvach)
komentarz 20 listopada 2016 przez dragulaa Użytkownik (950 p.)
Dzięki wielkie, jeszcze raz ! Wszytsko już śmiga :)

Podobne pytania

0 głosów
1 odpowiedź 5,807 wizyt
0 głosów
1 odpowiedź 105 wizyt
pytanie zadane 8 sierpnia 2020 w C i C++ przez TlenekWodoru Użytkownik (520 p.)

92,543 zapytań

141,383 odpowiedzi

319,482 komentarzy

61,929 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...