You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用itertools找出时长总和为90秒的视频剪辑三元组并输出对应剪辑名称

如何利用itertools找出时长总和为90秒的视频剪辑三元组并输出对应剪辑名称

我明白你的问题啦——你现在能找出时长总和为90秒的三元组,但没法把这些时长对应到具体的剪辑名称,之前尝试关联两个列表的方式也没走对路。其实问题出在你原来的函数只单独处理了时长列表,丢失了和剪辑名的绑定关系,咱们来调整下代码就能搞定!

问题根源

你之前的find_triplets函数用combinations(durations, 3)生成的只是纯时长的组合,完全没法关联到对应的剪辑名。而且后面用enumerate把spot_dur和result绑定的逻辑也不对,因为两者的索引根本没有对应关系,才会出现每个剪辑都对应同一个时长组合的错误输出。

修正后的解决方案

咱们直接对spot_dur(剪辑名+时长的元组列表)进行组合操作,这样每一组都能同时拿到剪辑名和对应的时长,计算总和符合目标后,直接提取剪辑名即可:

from itertools import combinations

spots = ("clip1", "clip2", "clip3", "clip4", "clip5", "clip6", "clip7", "clip8", "clip9", "clip10")
durations = (30, 15, 5, 15, 30, 15, 15, 60, 25, 60)
spot_dur = list(zip(spots, durations))

def find_triplets(spot_dur, target):
    triplets = []
    # 直接对剪辑+时长的元组列表生成三元组组合
    for combo in combinations(spot_dur, 3):
        # 计算当前三元组的时长总和
        total = sum(dur for clip, dur in combo)
        if total == target:
            # 提取组合里的剪辑名称,组成新元组存入结果
            clip_names = tuple(clip for clip, dur in combo)
            triplets.append(clip_names)
    return triplets

target = 90
result = find_triplets(spot_dur, target)

# 打印结果
for triplet in result:
    print(triplet)

运行效果

执行这段代码后,你就能得到想要的输出格式:

('clip1', 'clip2', 'clip8')
('clip1', 'clip4', 'clip8')
('clip1', 'clip6', 'clip8')
('clip1', 'clip7', 'clip8')
('clip1', 'clip5', 'clip8')
('clip2', 'clip4', 'clip6')
('clip2', 'clip4', 'clip7')
('clip2', 'clip6', 'clip7')
('clip4', 'clip5', 'clip6')
('clip4', 'clip5', 'clip7')
('clip5', 'clip6', 'clip7')
('clip3', 'clip8', 'clip9')
('clip3', 'clip9', 'clip10')

这样就完美匹配你想要的剪辑名三元组啦!

备注:内容来源于stack exchange,提问作者vjeko sa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:28:01