2011-03-09 2 views
0

У меня есть строкаPython: Как вы можете получить подстроку из строки без индексов?

s = "* * * * * * * = a b = c b = * * * * * * * " 

, и я хотел бы напечатать для каждого элемента = «*» подстроку, содержащую 7 пунктов до и через 7 после, например:

* * * * * * * = a b = c b = * 
* * * * * * = a b = c b = * * 
* * * * * = a b = c b = * * * 
* * * * = a b = c b = * * * * 
* * * = a b = c b = * * * * * 
* * = a b = c b = * * * * * * 
* = a b = c b = * * * * * * * 

Если попытался с помощью индекс, как это:

items = s.split(' ') 
    for i in items: 
     s = items.index(i) 
     start = s - 7 
     stop = s + 8 
     print items[start:stop] 

проблема заключается в том, что если элемент появится в списке второй раз, сценарий принимает индекс первого появления в списке, и вы получите это:

* * * * * * * = a b = c b = * 
* * * * * * = a b = c b = * * 
* * * * * = a b = c b = * * * 
* * * * * * * = a b = c b = * etc. 

Может ли кто-нибудь помочь мне в этом?

+1

Это домашнее задание? –

ответ

2

Используйте enumerate() так, что у вас есть и текущий элемент и его индекс в наличии:

items = s.split(' ') 
for index, item in enumerate(items): 
    if item != "*": 
     print items[index-7:index+8] 

Примечание: если это возможно, чтобы было меньше, чем 7 * символов в начале набора, вы можете использовать немного другую конечную строку:

 print items[max(index-7,0):index+8] 
+0

Это отлично работает! Большое спасибо. – May

Смежные вопросы