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 中最接近的前后两个时间戳了。

相关推荐
鼾声鼾语3 分钟前
simulink-esp32开发foc电机
开发语言·stm32·单片机·嵌入式硬件·学习
罗义凯4 分钟前
c++【入门】挖胡萝卜
开发语言·c++
向日葵xyz8 分钟前
基于人脸68特征点识别的美颜算法(一) 大眼算法 C++
开发语言·c++·算法
初学者↑19 分钟前
Java代码生成器(开源版本)
java·开发语言
loveLifeLoveCoding21 分钟前
Java 内存分页
java·开发语言
2.5条悟T^T22 分钟前
String类
java·c语言·开发语言·jvm·数据结构·算法·servlet
蓝天扶光29 分钟前
小白学python(第四天)顺序与分支篇
python
mayo的自留地30 分钟前
window10/11如何下载安装JDK(jdk) 超详细图文教程
java·开发语言·jvm·spring·servlet·tomcat·nio
立秋678931 分钟前
使用Python绘制极坐标图
开发语言·python
kaixin_learn_qt_ing33 分钟前
QListView自定义item(结合QSqlQueryModel)
开发语言·qt