2015-05-06 26 views
7

Voglio trovare alcuni segmenti di una stringa e archiviarli, tuttavia, dovrò memorizzare un gran numero di queste stringhe e stavo pensando che potrebbe essere più elegante memorizzarle come indici della stringa principale anziché come elenco di stringhe. Sto riscontrando problemi nel recuperare gli indici per l'uso. Ad esempio:Come memorizzare gli indici in una lista

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

s = 'ABCDEFGHIJKLMN' 

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

Sto pensando a questo nel modo sbagliato?

+0

Se si memorizzano sottostringhe e non indici - non è questo il modo in Python li memorizza internamente in ogni caso? –

risposta

14

La sintassi dell'affettatura basata sui due punti è valida solo all'interno dell'operatore di indicizzazione, ad es. x[i:j]. Invece, è possibile memorizzare gli oggetti slice nell'elenco, dove slice(x,y,z) equivale a x:y:z, ad es.

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

stamperà:

['ABC', 'F'] 
4

La tua idea di memorizzare indici invece di sottostringhe reali è buona.

Per quanto riguarda il meccanismo, è necessario memorizzare il (inizio, fine) i numeri come una tupla di due numeri interi:

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

Quando è il momento di riprodurre la stringa, scrivere codice come questo:

pair = index1[0] # (0,3) 
sub = s[pair[0] : pair[1]] # 'ABC' 
Problemi correlati