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