2015-05-06 26 views
7

Bir dizenin belirli bölümlerini bulmak ve depolamak istiyorum, ancak, bu dizeleri çok sayıda depolamalıyım ve bunları depolamak için daha zarif olabileceğini düşünüyordum. Dizgenin bir listesi olarak değil, ana dizgenin indisleri. Kullanım için endeksleri almakta sorun yaşıyorum. Örneğin,Endeksler bir listede nasıl saklanır

index1 = [0:3, 4:8] #invalid syntax 
index2 = ['0:3','5:6'] 

s = 'ABCDEFGHIJKLMN' 

print(s[index2[0]]) #TypeError string indices must be integers 

Bunu yanlış şekilde mi düşünüyorum?

+0

Eğer alt dizeleri değil endeksleri saklıyorsanız - Python içten onları yine de saklar nasıl bu değil mi? –

cevap

14

Sütun tabanlı dilimleme sözdizimi yalnızca indeksleme işleci içinde geçerlidir, örn. x[i:j]. Bunun yerine, listenizdeki slice nesnelerini saklayabilirsiniz; burada slice(x,y,z), x:y:z'a eşdeğerdir, ör.

index = [slice(0,3), slice(5,6)] 
print([s[i] for i in index]) 

yazdırır:

['ABC', 'F'] 
4

Gerçek alt dizeler yerine dizinleri saklama fikriniz iyi bir fikirdir.

mekanizması için olduğu gibi, iki tamsayılar bir demet olarak sayılar (başlangıç, sonu) saklamalısınız:

index1 = [(0,3), (4,8)] 

o alt dize çoğaltmak böyle kod yazmak için zamanı:

pair = index1[0] # (0,3) 
sub = s[pair[0] : pair[1]] # 'ABC' 
İlgili konular