Pythonic找到重叠元素的方法

时间:2017-12-22 18:24:10

标签: python python-2.7 machine-learning set

我有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做这个代码吗?

1 个答案:

答案 0 :(得分:0)

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