Перечислять предложения в python


У меня есть кортеж строк, состоящий из двух предложений

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

Я попробовал это

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

Который дает

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

В то время как то, что мне нужно, это

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

3 ответа:

Проще всего было бы вручную увеличить i вместо того, чтобы полагаться на enumerate и сбросить счетчик на символ ?, . или !.

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

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

Может быть, слишком сложно. Я думаю, что решение @JeromeJ чище. Но:

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

Еще один:

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 ?