![](/img/trans.png)
[英]How to find missing elements between two elements in a list in Python?
[英]How to find all elements between two elements repeatedly in a list in Python?
我有一个看起来像的列表
[item 1, abc, item 2, def, item 3, ghi, item 1, jkl, item 2]
我想找到“item 1”和“item 2”之间的所有元素,以及开始元素“item 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']
尝试这个:
my_list = ['some 1', 'some', 'item 1', 'abc', 'item 2', 'def', 'item 3', 'ghi', 'item 1', 'jkl', 'item 2', 'item 3']
index_1 = [i for i, val in enumerate(my_list) if val == 'item 1']
index_2 = [i for i, val in enumerate(my_list) if val == 'item 2']
output = []
for i, j in zip(index_1, index_2):
output.extend(my_list[i:j])
print(output)
结果:
['item 1', 'abc', 'item 1', 'jkl']
但是,它仅在item 2
后跟item 1
时才有效。 如果情况并非如此,则在最后一个for
循环之前必须小心
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.