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

如何在Python中枚举itertools.combinations的元组形式索引?

解决方案

你可以直接对原序列的下标执行combinations操作,再通过下标获取对应元素计算指标,即可直接生成键为下标元组(i,j)的字典,完全遵循combinations的原生规则,不需要自定义映射逻辑:

from itertools import combinations
objects = [...] # 你的对象序列
metrics = {
    (i, j): metric(objects[i], objects[j])
    for i, j in combinations(range(len(objects)), 2)
}

验证示例

以官方示例的ABCD场景验证:

objects = ['A', 'B', 'C', 'D']
# 生成的下标对顺序为 (0,1) (0,2) (0,3) (1,2) (1,3) (2,3)
# 对应元素对为 AB AC AD BC BD CD,和官方combinations规则完全一致

如果你已经提前生成了仅保存数值的metrics列表,需要将列表的整数索引反向映射为下标元组,也可以通过组合数公式直接计算:

import math

def idx_to_pair(k, n):
    # k是metrics列表的整数索引,n是原objects序列的长度
    i = n - 2 - math.floor(math.sqrt(-8*k + 4*n*(n-1)-7)/2.0 - 0.5)
    j = k + i + 1 - n*(n-1)//2 + (n-i)*((n-i)-1)//2
    return (i, j)

# 示例:n=4时,k=0返回(0,1),k=3返回(1,2),和规则匹配

优先推荐第一种方案,实现更简单也不会出现计算误差。

内容的提问来源于stack exchange,提问作者Alexander Soare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:21:03