2009-04-25 13 views
5

her bir oluşum tüm oluşumları verilen örnek sırayla "Q" ve "E" arasındaki tüm alt dizeleri almak için Örneğinbulmakta altdizgelerin

iki karakter arasında alt dizeleri almak için yardım edebilir:

ex: QUWESEADFQDFSAEDFS 

ve

asgari uzunlukta alt dizeyi bulmak için.

+0

Sorunuzu gözden geçirebilir ve biraz daha okunabilir hale getirebilir misiniz? Teşekkür ederim. – hyperboreean

cevap

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 o

substrings.sort(key=len) 

o gereksiz lambda ;-) daha bunu ifade etmek için iyi bir yoldur dışında doğru vardır.

Python 2.5 veya sonraki bir sürümünü kullanıyorsanız, min (alt dizgiler, anahtar = len), aslında, en kısa dizeyi (ilk olarak, birkaç dizenin "en kısa" için bağlanması durumunda), sıralamadan biraz daha hızlı bir şekilde verecektir. ve tabii ki, [0]. Ama eğer 2.4 ya da daha önce kalmışsanız, RichieHindle'ın yaklaşımı en iyi alternatiftir.

+0

Lambda hakkında iyi bir nokta - ne düşünüyordum? 8-) – RichieHindle

İlgili konular