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

Python中如何以更Pythonic的方式生成所有元素对及对应字典

更Pythonic的实现方案

直接用Python标准库itertools的工具替代手写嵌套循环即可,代码更简洁,也不容易出索引错误。

实现逻辑

  1. 展平嵌套的输入列表,保序去重得到所有节点的全局排列顺序,保证生成的键顺序和预期一致
  2. 预处理每个节点所属的原始子列表ID,用来快速判断两个节点的匹配关系
  3. 用itertools.combinations自动生成所有按顺序排列的两两节点对,不需要手写两层循环控制索引

完整代码

from itertools import chain, combinations

input_data = [
    ["s5"],
    ["s7"],
    ["s9", "s773"],
    ["s4", "s17"]
]

# 展平列表并保序去重,得到所有节点的全局顺序
all_nodes = list(dict.fromkeys(chain.from_iterable(input_data)))

# 构建节点到所属分组的映射,重复节点保留第一次出现的分组
node_group = {}
for group_id, group in enumerate(input_data):
    for node in group:
        node_group.setdefault(node, group_id)

result = {}
for node_a, node_b in combinations(all_nodes, 2):
    key = f"{node_a}_{node_b}"
    # 此处修改判断逻辑即可匹配你的布尔值规则,示例为同组返回True
    result[key] = (node_group[node_a] == node_group[node_b])

补充说明

如果你示例里的布尔值有额外判断规则,只需要修改最后给result[key]赋值的布尔表达式即可,遍历生成键的逻辑不需要调整。这种写法是Python处理组合遍历场景的通用惯例,不需要手动维护循环索引,能避免很多低级错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:45:30