Python Forum

Full Version: index between values
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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?
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.
Yes thanks Gribouillis that worked
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']]