2009-04-25 13 views
5

Czy możesz mi pomóc, aby uzyskać podciągów między dwoma znakami przy każdym wystąpieniuZnajdowanie podciągów w python

Na przykład, aby uzyskać wszystkie podciągi między „Q” i „E” w podanym przykładzie sekwencji we wszystkich przypadkach:

ex: QUWESEADFQDFSAEDFS 

i znaleźć podciąg o minimalnej długości.

+0

Czy możesz przejrzeć swoje pytanie i sprawić, że będzie on czytelny, podając również więcej szczegółów? Dziękuję Ci. – hyperboreean

Odpowiedz

16
import re 
DATA = "QUWESEADFQDFSAEDFS" 

# Get all the substrings between Q and E: 
substrings = re.findall(r'Q([^E]+)E', DATA) 
print "Substrings:", substrings 

# Sort by length, then the first one is the shortest: 
substrings.sort(key=lambda s: len(s)) 
print "Shortest substring:", substrings[0] 
7

RichieHindle ma rację, tyle że

substrings.sort(key=len) 

jest lepszym sposobem wyrażania go od tej nadmiarowej lambda ;-).

Jeśli używasz Pythona 2.5 lub nowszego, min (ciągi, klucz = len) dadzą ci jeden najkrótszy ciąg (pierwszy, jeśli kilka ciągów wiąże "najkrótszy") całkiem sporo szybciej niż sortowanie i oczywiście biorąc pod uwagę [0] element. Ale jeśli utkniesz z 2.4 lub wcześniejszym, podejście RichieHindle jest najlepszą alternatywą.

+0

Dobra uwaga o lambdzie - o czym myślałem? 8-) – RichieHindle