Python:数值区间处理(py-part)

问题描述1

存在多个不连续的数值区间,如 [1,10] 、[20,50] 、[100,200] … ,此时该如何高效判断一个数值在这些区间内?

问题描述2

生物学数据分析中,有时需要判断 SNPs 是否在 ChIPseq 或 ATACseq 的 peak 区域内,并删除掉不在这些区域内的 SNPs。在这些需求中, peak 区间的数量可能达到数万之多,如何仅用一次循环就能达到目的?


安装 py-part 包

pip install py-part

py-part 使用方法

from part import Interval

(1) 生成左闭右开的单个整数区间

interval = Interval[int](lower_value=10, upper_value=20)
print(interval)

# [10;20)

bool_ = 12 in interval
print(bool_)

# True

(2) 默认情况下,生成的区间为左闭右开,可以通过 upper_closedlower_closed 进行设置。如下,生成左开右闭的区间。

interval = Interval[int](lower_value=10, upper_value=20, upper_closed=True, lower_closed=False)
print(interval)

# (10;20]

(3) 生成字符区间

interval = Interval[str](lower_value="abc", upper_value="def", upper_closed=True)

# ['abc';'def']

(4) 两个区间是否存在交集判断

a = Interval[int](lower_value=10, upper_value=20)
b = Interval[int](lower_value=15, upper_value=30)

# 判断a与b区间是否存在交集
a.overlaps(b)

# True

(5) 判断两个区间是否具有相同的起点或终点

a = Interval[int](lower_value=10, upper_value=20)
b = Interval[int](lower_value=15, upper_value=30)

# 判断a与b区间的起点是否相同
a.starts(b)

# False

# 判断a与b区间的终点是否相同
a.finishes(b)

# False

(6) 利用 FrozenIntervalSet 构造多个区间

from part import FrozenIntervalSet

每个区间用一个元组表示,所有区间通过列表传递给 FrozenIntervalSet 函数。例如:

a = FrozenIntervalSet[int]([2, (6, 7), (8, 9, None), (10, 11, True, True)])

print(a)
# [2;2] | [6;7) | (8;9) | [10;11]

其它方法参照官方文档

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值