gpt4 book ai didi

python - 将范围元组列表折叠到重叠范围中

转载 作者:行者123 更新时间:2023-12-04 20:17:15 27 4
gpt4 key购买 nike

我正在寻找最节省内存的方法来解决这个问题。

我有一个表示句子中部分字符串匹配的元组列表:

[(0, 2), (1, 2), (0, 4), (2,6), (23, 2), (22, 6), (26, 2), (26, 2), (26, 2)]

每个元组的第一个值是匹配的开始位置,第二个值是长度。

这个想法是折叠列表,以便只报告最长的继续字符串匹配。在这种情况下,它将是:
[(0,4), (2,6), (22,6)]

我不想要最长的范围,比如 algorithm to find longest non-overlapping sequences ,但我希望所有范围以最长的时间折叠。

如果您想知道,我正在使用 Aho-Corasick 的纯 Python 实现将静态字典中的术语与给定的文本片段进行匹配。

编辑:由于这些元组列表的性质,重叠但不是独立的范围应该单独打印出来。例如,有词 betazzeta在字典中,匹配 betazeta[(0,5),(4,8)] .由于这些范围重叠,但不包含在其他范围内,因此答案应该是 [(0,5),(4,8)] .我还修改了上面的输入数据集,以便涵盖这种情况。

谢谢!

最佳答案

import operator
lst = [(0, 2), (1, 2), (0, 4), (2,6), (23, 2), (22, 6), (26, 2), (26, 2), (26, 2)]
lst.sort(key=operator.itemgetter(1))
for i in reversed(xrange(len(lst)-1)):
start, length = lst[i]
for j in xrange(i+1, len(lst)):
lstart, llength = lst[j]
if start >= lstart and start + length <= lstart + llength:
del lst[i]
break
print lst
#[(0, 4), (2, 6), (22, 6)]

关于python - 将范围元组列表折叠到重叠范围中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com