更好的解决方案

def get_abs_min(ranges):

return min([min(r) for r in ranges])

def get_abs_max(ranges):

return max([max(r) for r in ranges])

def count_appearances(i, ranges):

return sum([1 for r in ranges if i in r])

def create_histogram(ranges):

keys = [str(i) for i in range(len(ranges) + 1)]

histogram = dict.fromkeys(keys)

results = []

min = get_abs_min(range_list)

max = get_abs_max(range_list)

for i in range(min, max):

count = str(count_appearances(i, ranges))

if histogram[count] is None:

histogram[count] = dict(start=i, end=None)

elif histogram[count]['end'] is None:

histogram[count]['end'] = i

elif histogram[count]['end'] == i - 1:

histogram[count]['end'] = i

else:

start = histogram[count]['start']

end = histogram[count]['end']

results.append((range(start, end + 1), count))

histogram[count]['start'] = i

histogram[count]['end'] = None

for count, d in histogram.items():

if d is not None and d['start'] is not None and d['end'] is not None:

results.append((range(d['start'], d['end'] + 1), count))

return results

def main(ranges, top):

appearances = create_histogram(ranges)

return sorted(appearances, key=lambda t: t[1], reverse=True)[:top]

这里的想法很简单,就是迭代所有范围的叠加,并建立一个外观直方图(例如,当前原始范围的数量

i

出现在)

之后,根据选择的结果大小进行排序和切片。

只需使用所需的范围和最上面的数字调用main(或

None

下面的旧编辑

我(几乎)同意@Kasramvd的回答。

from collections import Counter

from itertools import combinations

def range_overlap(x, y):

common_part = list(set(x) & set(y))

if common_part:

return range(common_part[0], common_part[-1] +1)

else:

return False

def get_most_common(range_list, top_frequent):

overlaps = Counter(range_overlap(i, j) for i, j in

combinations(list_of_ranges, 2))

return [(r, i) for (r, i) in overlaps.most_common(top_frequent) if r]

你需要输入

range_list

top_frequent

你想要的。

编辑

此编辑将根据您的输入和结果进行测试,并给出正确答案:

from collections import Counter

from itertools import combinations

def range_overlap(*args):

sets = [set(r) for r in args]

common_part = list(set(args[0]).intersection(*sets))

if common_part:

return range(common_part[0], common_part[-1] +1)

else:

return False

def get_all_possible_combinations(range_list):

all_combos = []

for i in range(2, len(range_list)):

all_combos.append(combinations(range_list, i))

all_combos = [list(combo) for combo in all_combos]

return all_combos

def get_most_common_for_combo(combo):

return list(filter(None, [range_overlap(*option) for option in combo]))

def get_most_common(range_list, top_frequent):

all_overlaps = []

combos = get_all_possible_combinations(range_list)

for combo in combos:

all_overlaps.extend(get_most_common_for_combo(combo))

return [r for (r, i) in Counter(all_overlaps).most_common(top_frequent) if r]

为了得到结果

get_most_common(range_list, top_frequent)

在我的机器上测试(ubunut 16.04 with python 3.5.2)并输入

范围列表

top_frequent = 5

结果如下:

[range(3000, 4000), range(2500, 4000), range(1500, 4000), range(3000, 6000), range(1, 4000)]

python时间重叠_最常见的重叠范围-Python3.x相关推荐

  1. python时间重叠_Python中的时间范围重叠算法

    我有不同的身份证,开始日期和结束日期, 比如说:[ (5, d.datetime(2010, 9, 19, 0, 0, 0), d.datetime(2010, 9, 19, 0, 5, 10)), ...

  2. opencv对应python版本_【求问各位大佬python3.6怎么使用opencv,用哪个版本】python3 opencv...

    python opencv中imshow输出图像太大,如何调整输出尺寸? 通过resize重置尺寸 参图片,输出图片尺寸(一般我不用这个,None),宽例,高的比例 例子:将图片img,缩小一半显示, ...

  3. 摩尔斯电码转换python编码_摩尔斯电码到英文python3

    我想用Python 3将摩尔斯电码转换成英文 我已经设法使用这个将英语转换成莫尔斯码 http://code.activestate.com/recipes/578407-simple-morse-c ...

  4. Python基础概念_14_常见术语

    常见术语 15 常见术语 15.1 简介 Python里有一些常见的专业名词.用语,我们一般统称为术语.为了更方便的学习python我们通过表格的方式列举了常用的术语和单词以及工具. 15.2 常见术 ...

  5. python 切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

  6. python开始_开始Python的新手教程

    作者:秦路,天善智能特约专家.资深数据分析师,数据化运营专家.擅长结合运营和数据,建立数据化运营体系. 个人公众号:秦路(微信ID:tracykanc). 本文是<如何七周成为数据分析师> ...

  7. 3 x 10的python表达式_这道数学题用PYTHON编程语言怎么写? 编程语言python是用

    我觉着,这个应该这样解决比较符合计算机解题思路. 下面的回答的,思考的东西太多. # -*- coding: utf-8 -*- __author__ = 'lpe234' __date__ = '2 ...

  8. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  9. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

最新文章

  1. 这可能是Python面向对象编程的最佳实践
  2. RocketMQ 基本概念
  3. PAT1066 Root of AVL Tree (25)(AVL树)
  4. IT项目管理总结:第二章 项目管理和IT背景
  5. ie浏览器网页版进入_IE浏览器打开网页速度很慢的解决办法
  6. phpStrom编辑器常用功能教程
  7. socket 函数 setsockopt()用法
  8. 索尼电视android屡次停止,索尼电视撤回安卓8.0固件包:存在无法连接WiFi问题
  9. oracle 分区交换
  10. 杭州银行2018信息科技部面试
  11. 【办公】Gmail的常用方法以及小技巧
  12. 台式计算机的硬件故障,电脑主板坏了会出现什么情况?台式机电脑主板常见故障解决方法...
  13. iOS_6_ToolBar+xib+红楼梦
  14. 【洛谷八连测R5】whzzt-Warmth
  15. Zero-shot Learning零样本学习 论文阅读(五)——DeViSE:A Deep Visual-Semantic Embedding Model
  16. jpg怎么压缩大小?jpg图片如何压缩大小kb?
  17. 用turtle画只小熊猫
  18. 黑苹果适合什么用途?_黑苹果系统,Ozmosis和四叶草、变色龙相比有什么区别和优势?...
  19. MCAFEE杀毒软件无法完全卸载的解决方案
  20. 活期利率是怎么计算的?

热门文章

  1. mysql物理读和逻辑读,SQL Server中STATISTICS IO物理读和逻辑读的误区
  2. GitHub访问越来越慢了,怎么办?
  3. 面试:如何实现 MySQL 删除重复记录并且只保留一条
  4. 重磅消息:Redis 6.0.0 稳定版发布
  5. 7000字 Redis 超详细总结笔记总 | 收藏必备!
  6. 玩转Mybatis中的类型转换器TypeHandler
  7. rpm 安装 忽略依赖_CentOS 7 安装 MySQL 5.7 详细教程及常见问题
  8. python pcl学习入门
  9. 大改ShuffleNetV2网络,注意力机制,csp,卷积裁剪
  10. python调用C++之pybind11入门