python_时间戳对齐

需求

python 有2个保存时间戳的list, listA 和 listB, 对于listA中的每一个时间戳元素cur_ts, 查找listB中 与cur_ts最接近的前后两个时间戳元素

代码

python 复制代码
import bisect

# 示例数据
listA = [1, 5, 10, 15]
listB = [2, 6, 8, 12, 14, 18]

def find_closest_timestamps(listA, listB):
    results = []
    for cur_ts in listA:
        pos = bisect.bisect_left(listB, cur_ts)
        if pos == 0:
            closest_before = None
            closest_after = listB[0]
        elif pos == len(listB):
            closest_before = listB[-1]
            closest_after = None
        else:
            closest_before = listB[pos - 1]
            closest_after = listB[pos]
        results.append((cur_ts, closest_before, closest_after))
    return results

# 执行函数并打印结果
results = find_closest_timestamps(listA, listB)
for cur_ts, before, after in results:
    print(f"当前时间戳: {cur_ts}, 最接近的前一个时间戳: {before}, 最接近的后一个时间戳: {after}")

以上代码的工作原理如下:

  1. 使用 bisect_leftlistB 中找到插入 cur_ts 的位置 pos
  2. 根据 pos 的值来确定 cur_tslistB 中最接近的前后两个时间戳:
    • 如果 pos 为 0,说明 cur_ts 小于 listB 中的所有元素,此时没有比 cur_ts 小的元素。
    • 如果 pos 等于 listB 的长度,说明 cur_ts 大于 listB 中的所有元素,此时没有比 cur_ts 大的元素。
    • 否则,listB[pos - 1] 是最接近 cur_ts 且小于 cur_ts 的元素,listB[pos] 是最接近 cur_ts 且大于等于 cur_ts 的元素。

运行这段代码,输出结果为:

当前时间戳: 1, 最接近的前一个时间戳: None, 最接近的后一个时间戳: 2

当前时间戳: 5, 最接近的前一个时间戳: 2, 最接近的后一个时间戳: 6

当前时间戳: 10, 最接近的前一个时间戳: 8, 最接近的后一个时间戳: 12

当前时间戳: 15, 最接近的前一个时间戳: 14, 最接近的后一个时间戳: 18

这样你就可以找到 listA 中每个时间戳在 listB 中最接近的前后两个时间戳了。

相关推荐
從南走到北9 分钟前
JAVA代驾小程序源码代驾跑腿APP源码
java·开发语言·微信·微信小程序·小程序
lightqjx10 分钟前
【C++】对set和map的使用
开发语言·数据结构·c++·stl
快乐zbc18 分钟前
C++ 中 typedef 指针别名与 const 的坑
开发语言·c++
urkay-23 分钟前
Android getDrawingCache 过时废弃
android·java·开发语言·kotlin·iphone·androidx
小oo呆26 分钟前
【学习心得】Python好库推荐——pipx
linux·开发语言·python
smile_Iris28 分钟前
Day 28 元组和OS模块
python·机器学习
CoderYanger29 分钟前
C.滑动窗口-求子数组个数-越短越合法——3258. 统计满足 K 约束的子字符串数量 I
java·开发语言·算法·leetcode·1024程序员节
AI科技星43 分钟前
时空运动的几何约束:张祥前统一场论中圆柱螺旋运动光速不变性的严格数学证明与物理诠释
服务器·数据结构·人工智能·python·科技·算法·生活
幽络源小助理43 分钟前
《已调试》SpringBoot景区寄存管理系统源码 - 免费JavaWeb项目下载 | 幽络源
java·开发语言·spring boot
豆沙沙包?1 小时前
2025年--Lc302-415. 字符串相加--java版
java·开发语言