2015-07-03 23 views
6

ho una tupla di stringhe che si compone di due frasienumerare frasi in pitone

a = ('What', 'happened', 'then', '?', 'What', 'would', 'you', 'like', 'to', 'drink','?') 

Ho provato questo

for i,j in enumerate(a): 
print i,j 

che dà

0 What 
1 happened 
2 then 
3 ? 
4 What 
5 would 
6 you 
7 like 
8 to 
9 drink 
10 ? 

mentre ciò che mi serve è questo

0 What 
1 happened 
2 then 
3 ? 
0 What 
1 would 
2 you 
3 like 
4 to 
5 drink 
6? 
+0

Come faccio a saperlo erano la prima linea termina nella tupla? Il punto interrogativo è un separatore? –

+0

Hai una tupla di stringhe nel tuo esempio. Questo è diverso da ciò che affermi nella descrizione, "Una stringa di due frasi" – user3636636

+0

@ Tanveer Alam: sì, è corretto, '?' è un separatore ma può anche essere qualsiasi altro segno di punteggiatura. – user3635159

risposta

7

Il più semplice sarebbe quello di aumentare manualmente i invece di fare affidamento su enumerate e reimpostare il contatore sul carattere ?, . o !.

i = 0 
for word in sentence: 
    print i, word 

    if word in ('.', '?', '!'): 
     i = 0 
    else: 
     i += 1 
+0

Questa è una soluzione semplice, ma molto efficace! Mi piacciono anche altri suggerimenti, ma sono d'accordo con @UlfR che questo è il meno complicato. – user3635159

+0

qualche idea di come sarebbe questo in uno script 'shell' o' awk'? – user3635159

1

Forse troppo complicato. Penso che la soluzione di @JeromeJ sia più pulita. Ma:

a=('What', 'happened', 'then', '?', 'What', 'would', 'you', 'like', 'to', 'drink','?') 
start = 0 
try: end = a.index('?', start)+1 
except: end = 0 

while a[start:end]: 
    for i,j in enumerate(a[start:end]): 
     print i,j 
    start = end 
    try: end = a.index('?', start)+1 
    except: end = 0 
1

Un altro:

from itertools import chain 

for n,c in chain(enumerate(a[:a.index('?')+1]), enumerate(a[a.index('?')+1:])): 
    print "{} {}".format(n,i) 
    ....: 
0 What 
1 happened 
2 then 
3 ? 
0 What 
1 would 
2 you 
3 like 
4 to 
5 drink 
6 ?