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']] |