首页 > 解决方案 > 在 python 列表中向后或向前循环以查找匹配项

问题描述

我有一个 python 列表,我将在其中搜索并找到一个术语。一旦我找到它,我需要在列表中后退并找到第一个出现的地方,=然后继续前进并找到第一个出现的地方;

我尝试使用 while 循环,但它不起作用。

extract = [1,2,"3=","fd","dfdf","keyword","ssd","sdsd",";","dds"]

indices = [i for i,s in enumerate(extract) if 'keyword' in s] 


for ind in indices:
    ind_while_for = ind
    ind_while_back = ind
    if ('=' in extract[ind]) & (';' in extract[ind]):
        print(extract[ind])   
    if (';' in extract[ind]) & ('=' not in extract[ind]):
        while '=' in extract[ind_while_back-1]:
            ind_while_back -= 1    
        print(' '.join(extract[ind_while_back:ind]))

结果要求:3= fd dfdf keyword ssd sdsd ;

标签: pythonpython-3.xpython-2.7jupyter-notebookspyder

解决方案


您可以使用:

l = [1, 2, "3=", "fd", "dfdf", "keyword", "ssd", "sdsd", ";", "dds"]

s = "keyword"

def take(last, iterable):
    l = []
    for x in iterable:
        l.append(x)
        if last in x:
            break
    return l

# get all elements on the right of s
right = take(';', l[l.index(s) + 1:])

# get all elements on the left of s using a reversed sublist
left = take('=', l[l.index(s)::-1])

# reverse the left list back and join it to the right list
subl = left[::-1] + right

print(subl)
['3=', 'fd', 'dfdf', 'keyword', 'ssd', 'sdsd', ';']

推荐阅读