python - 如何在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' .
有什么办法可以解决吗?谢谢!
解决方案
下一个代码找到正则表达式的最左侧匹配项和正则表达式的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']
推荐阅读
- netlify - Netlify CMS - Uploadcare - 缺少外部媒体库
- arrays - 使用 Array 生成随机数
- c - bool** 的类型与 bool*[4] 类型不兼容
- google-analytics - Google Analytics 4 电子商务:view_item_list 中 item_list_id 的问题
- cmake - 如何仅在 cmake 中匹配主要版本
- sql - 从子查询返回多个聚合列
- python - 组合列表中的元素以形成新列表
- c# - ADO.NET - 动态循环遍历 SqlDataReader 列并将这些值分配给 C# 对象
- amazon-web-services - Terraform 给我 Fileset IDENT 错误
- python - 我正在使用 LBPH 算法,但我的面部识别和考勤功能出现此错误“raise KeyError(key) from err KeyError: 'Id'”