Pythonic找到重叠元素的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pythonic找到重叠元素的方法相关的知识,希望对你有一定的参考价值。

我有2个正则表达式,它们提取数据并将它们分类为feature-1和feature-2,但在少数情况下,数据被分类为feature-1(f1)和feature-2(f2)。例如:亚马逊已有100年历史。

100岁被归类为f1,100岁被归类为f2。当它显示在UI上时。它显示为100岁100年是错误的,因为只需要显示100岁。为了处理超集和子集。我试图遍历每个功能并比较它们是否是重叠特征f2。此代码正在运行,但如果要处理25000个功能,则会产生巨大的性能影响。

`if df.iloc[i]['section_id'] == section_id and st_pos != -1:
    start_pos.append(st_pos)
    end_pos.append(en_pos)
    list.append(df.iloc[i]['id'])
'''
In the below loop, the positions are stored in  set form, If any subset found, then store it to list_subset
'''
        for i in range(0,len(start_pos)-1):
            for j in range(i+1,len(start_pos)):
                if 
    set(range(start_pos[i],end_pos[i])).issubset(range(start_pos[j],end_pos[j])):
    list_subset.append(list[i])
                elif 
    set(range(start_pos[j],end_pos[j])).issubset(range(start_pos[i],end_pos[i])):
    list_subset.append(list[j])`

他们是一个更好的方式来pythonically做这个代码?

答案

假设f1从位置5开始并且长度为4个字母,因此它占据位置5,6,7和8.如果f2在任何这些位置开始,即f2的起始位置大于或等于5,则f2将重叠。小于或等于8。

if f1_start_pos <= f2_start_pos <= f1_start_pos + f1_length - 1:

大概你还需要检查相反的情况:

if f2_start_pos <= f1_start_pos <= f2_start_pos + f2_length - 1:

以上是关于Pythonic找到重叠元素的方法的主要内容,如果未能解决你的问题,请参考以下文章

合并两个重叠列表的Pythonic方法,保留顺序

导航上的片段生命周期重叠

当我使用 fragmentTransaction.add 方法时片段重叠

从列表中弹出随机元素的最pythonic方法是啥?

使用 numpy 进行元素“输入”的 Pythonic 和有效方法

当期望列表仅包含单个元素时获取列表元素的Pythonic方法?