python - Python:如何使用项目中的开始/结束时间戳对齐两个列表
问题描述
我有两个列表,每个列表都按以下顺序排序,start_time
并且end_time
不与其他项目重叠:
# (word, start_time, end_time)
words = [('i', 5.12, 5.23),
('like', 5.24, 5.36),
('you', 5.37, 5.71),
('really', 7.21, 7.51),
('yes', 8.32, 8.54)]
# (speaker, start_time, end_time)
segments = [('spk1', 0.0, 1.25),
('spk2', 4.75, 6.25),
('spk1', 6.75, 7.75),
('spk2', 8.25, 9.25)]
我想将每个项目中words
的项目分组start_time
并产生如下内容:end_time
segments
res = [('i', 'like', 'you'),
('really'),
('yes')]
使得 in 中的每一项都res
包含 中对应项的words
withstart_time
和end_time
介于start_time
and之间的所有项。end_time
segments
解决方案
我在输入问题时想出了这个解决方案。我猜stackoverflow是一个很好的橡皮鸭。但我很想听听是否有更省时的方法。
res = []
cur = 0
for speaker, start, end in segments:
sent = []
for i, (word, word_start, word_end) in enumerate(words[cur:]):
if word_start >= end:
cur = cur + i
break
sent.append(word)
res.append((speaker, start, end, round(end - start, 2), " ".join(sent)))
if len(sent) == len(words[cur:]):
cur = len(words)
推荐阅读
- php - 如何修复“WP_Term 类的对象无法转换为字符串”
- jquery - jQuery自动完成 - 附加建议不可点击
- airflow - 气流无法使用 GoogleCloud Operatos 遍历 xcom_pull 列表
- html - 当所有其他容器都尽可能小时,如何让容器缩小?
- c++ - 如何在运行时从 flatbuffer 中获取数据值和数据类型
- ios - 如何使用新的pencilkit api注释pdf?
- jenkins - 如果 jenkinsfile 不存在,Bitbucket 分支源插件无法扫描
- firebase - Cloud Functions - 用户自定义声明返回未定义
- node.js - 如何在 Sequelize 中使用案例条件?
- reactjs - reactjs中有哪些节点?