2015-07-03 15 views
6

mam krotki ciągów, który składa się z dwóch zdańWyliczanie zdania w Pythonie

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

Próbowałem to

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

co daje

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

, natomiast to, co potrzebne jest to

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

Skąd mam wiedzieć jako pierwsza linia kończy się w krotce? Czy znak zapytania jest separatorem? –

+0

Masz w swoim przykładzie krotkę strun. To różni się od tego, co podajesz w opisie: "Ciąg dwóch zdań" – user3636636

+0

@ Tanveer Alam: tak, to prawda, "?" jest separatorem, ale może być również dowolnym innym znakiem interpunkcyjnym. – user3635159

Odpowiedz

7

Najprostszy będzie ręczny wzrost i zamiast polegania na enumerate i wyzerowanie licznika na znaku ?, . lub !.

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

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

To jest ładne i proste, a jednocześnie bardzo skuteczne rozwiązanie! Lubię również inne sugestie, ale zgadzam się z @UlfR, że ten jest najmniej skomplikowany. – user3635159

+0

jakikolwiek pomysł jak to będzie wyglądać w "shell" skryptu lub 'awk'? – user3635159

1

Może zbytnie skomplikowane. Rozwiązanie @JeromeJ jest czystsze, jak sądzę. Ale:

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

Jeden więcej:

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 ?