首页 > 解决方案 > 如何在Python列表中重复查找两个元素之间的所有元素?

问题描述

我有一个看起来像的列表

[item 1, abc, item 2, def, item 3, ghi, item 1, jkl, item 2]

我想找到“项目 1”和“项目 2”之间的所有元素,以及起始元素“项目 1”。

我想要的应该是这样的:

[item 1, abc, item 1, jkl]

顺便说一句,对于'item 1'和'item 2',我更喜欢使用正则表达式来匹配它们,因为它在不同的文本中可能会有所不同,例如,在某些文本中是'item 1',而在其他文本中是'item1' .

有什么办法可以解决吗?谢谢!

标签: python

解决方案


下一个代码找到正则表达式的最左侧匹配项和正则表达式的re1最右侧匹配项re2并打印此子范围,如果re1未找到,则子范围从第 0 个元素开始,如果re2未找到则在列表末尾结束。

re1如果您需要在找到或未找到错误时抛出错误,请在代码中re2替换为。[default][]

在线尝试!

import re
l = ['some 1', 'some', 'item 1', 'abc', 'item 2', 'def', 'item 3', 'ghi', 'item 1', 'jkl', 'item 2', 'item 3']
re1, re2 = r'item 1', r'item 2'
begin, end = [
    ([i for i, e in enumerate(l) if re.fullmatch(r, e)] or [default])[idx]
    for r, (default, idx) in ((re1, (0, 0)), (re2, (len(l), -1)))
]
print(l, '\n', begin, end, '\n', l[begin : end])

上面代码的输出:

['some 1', 'some', 'item 1', 'abc', 'item 2', 'def', 'item 3', 'ghi', 'item 1', 'jkl', 'item 2', 'item 3'] 
 2 10 
 ['item 1', 'abc', 'item 2', 'def', 'item 3', 'ghi', 'item 1', 'jkl']

推荐阅读