Python Forum
index between values - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: index between values (/thread-15087.html)



index between values - mapvis - Jan-03-2019

I have a list of words and I want to get the values of all words in between the word "and" but have to account for the number of words in between "and" varies as well as the amount of ands will vary in the list

list = ['visit', 'houston', 'and', 'san', 'antonio', 'and', 'austin', 'and', 'corpus', 'christi']

needing
list[1] # for Houston
list[3:4] #for joining san antonio
list[6] #for austin
list[8:] #for joining corpus christi

here is what i have so far

index_ands = [index for index, value in enumerate(list) if value == "and"] #gives the index of ands [2,5,7]
andleng = len(index_ands) #gives the number of ands is 3
    for ands in index_ands:
        #What goes here?



RE: index between values - Gribouillis - Jan-03-2019

Here is a way, using module itertools
>>> import itertools as itt
>>> L = ['visit', 'houston', 'and', 'san', 'antonio', 'and', 'austin', 'and', 'corpus', 'christi']
>>> [list(g) for k, g in itt.groupby(L, key=lambda word: word=='and') if not k]
[['visit', 'houston'], ['san', 'antonio'], ['austin'], ['corpus', 'christi']]
Avoid using 'list' as a variable name, it is the name of a built-in function.


RE: index between values - mapvis - Jan-03-2019

Yes thanks Gribouillis that worked


RE: index between values - perfringo - Jan-04-2019

itertools.groupby is superior solution, but to answer OP-s original question ('What goes here?')

>>> lst = ['visit', 'houston', 'and', 'san', 'antonio', 'and', 'austin', 'and', 'corpus', 'christi']
>>> indexes = [i for i, v in enumerate(lst) if v == 'and'] 
>>> result = []
>>> start = 1
>>> for i in indexes:
...     result.append(lst[start:i])
...     start = i + 1
... else:
...     result.append(lst[start:])
...
>>> print(result)
[['houston'], ['san', 'antonio'], ['austin'], ['corpus', 'christi']]