python时间重叠_最常见的重叠范围-Python3.x
更好的解决方案
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相关推荐
- python时间重叠_Python中的时间范围重叠算法
我有不同的身份证,开始日期和结束日期, 比如说:[ (5, d.datetime(2010, 9, 19, 0, 0, 0), d.datetime(2010, 9, 19, 0, 5, 10)), ...
- opencv对应python版本_【求问各位大佬python3.6怎么使用opencv,用哪个版本】python3 opencv...
python opencv中imshow输出图像太大,如何调整输出尺寸? 通过resize重置尺寸 参图片,输出图片尺寸(一般我不用这个,None),宽例,高的比例 例子:将图片img,缩小一半显示, ...
- 摩尔斯电码转换python编码_摩尔斯电码到英文python3
我想用Python 3将摩尔斯电码转换成英文 我已经设法使用这个将英语转换成莫尔斯码 http://code.activestate.com/recipes/578407-simple-morse-c ...
- Python基础概念_14_常见术语
常见术语 15 常见术语 15.1 简介 Python里有一些常见的专业名词.用语,我们一般统称为术语.为了更方便的学习python我们通过表格的方式列举了常用的术语和单词以及工具. 15.2 常见术 ...
- python 切片_全面解读Python高级特性切片
大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...
- python开始_开始Python的新手教程
作者:秦路,天善智能特约专家.资深数据分析师,数据化运营专家.擅长结合运营和数据,建立数据化运营体系. 个人公众号:秦路(微信ID:tracykanc). 本文是<如何七周成为数据分析师> ...
- 3 x 10的python表达式_这道数学题用PYTHON编程语言怎么写? 编程语言python是用
我觉着,这个应该这样解决比较符合计算机解题思路. 下面的回答的,思考的东西太多. # -*- coding: utf-8 -*- __author__ = 'lpe234' __date__ = '2 ...
- Python基础_第3章_Python中的循环结构
Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...
- Python基础_第5章_Python中的数据序列
Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...
最新文章
- 这可能是Python面向对象编程的最佳实践
- RocketMQ 基本概念
- PAT1066 Root of AVL Tree (25)(AVL树)
- IT项目管理总结:第二章 项目管理和IT背景
- ie浏览器网页版进入_IE浏览器打开网页速度很慢的解决办法
- phpStrom编辑器常用功能教程
- socket 函数 setsockopt()用法
- 索尼电视android屡次停止,索尼电视撤回安卓8.0固件包:存在无法连接WiFi问题
- oracle 分区交换
- 杭州银行2018信息科技部面试
- 【办公】Gmail的常用方法以及小技巧
- 台式计算机的硬件故障,电脑主板坏了会出现什么情况?台式机电脑主板常见故障解决方法...
- iOS_6_ToolBar+xib+红楼梦
- 【洛谷八连测R5】whzzt-Warmth
- Zero-shot Learning零样本学习 论文阅读(五)——DeViSE:A Deep Visual-Semantic Embedding Model
- jpg怎么压缩大小?jpg图片如何压缩大小kb?
- 用turtle画只小熊猫
- 黑苹果适合什么用途?_黑苹果系统,Ozmosis和四叶草、变色龙相比有什么区别和优势?...
- MCAFEE杀毒软件无法完全卸载的解决方案
- 活期利率是怎么计算的?
热门文章
- mysql物理读和逻辑读,SQL Server中STATISTICS IO物理读和逻辑读的误区
- GitHub访问越来越慢了,怎么办?
- 面试:如何实现 MySQL 删除重复记录并且只保留一条
- 重磅消息:Redis 6.0.0 稳定版发布
- 7000字 Redis 超详细总结笔记总 | 收藏必备!
- 玩转Mybatis中的类型转换器TypeHandler
- rpm 安装 忽略依赖_CentOS 7 安装 MySQL 5.7 详细教程及常见问题
- python pcl学习入门
- 大改ShuffleNetV2网络,注意力机制,csp,卷积裁剪
- python调用C++之pybind11入门