Python中基于两个字典生成无重复三元组合的term_wMca实现方法
实现无重复元素的三元组合计算
要实现仅保留三元组元素完全不重复的计算逻辑,只需在遍历过程中加入重复元素的过滤判断,以下是具体实现:
核心思路
- 从字典
a取元素k,从字典c取两个元素j、l,要求k、j、l三者两两互不相同 - 直接通过等值判断过滤重复元素,或利用集合特性快速校验
- 适配任意规模的输入字典,自动排除含重复元素的组合
基础修改版代码
import sympy as sp a = {'A': 1} c = {'B': 1, 'C': 1} term_wMca = 0 # 获取字典键集合,方便重复判断 keys_a = set(a.keys()) keys_c = set(c.keys()) for k in keys_a: for j in keys_c: # 跳过与k重复的j if j == k: continue for l in keys_c: # 跳过与k或j重复的l if l == k or l == j: continue # 构造符号项并累加 x_k = sp.symbols(f'x{k}') x_j = sp.symbols(f'x{j}') x_l = sp.symbols(f'x{l}') w_term = sp.symbols(f'W_{l}{j}{k}') term_wMca += x_k * x_j * x_l * w_term print(term_wMca)
优化适配大字典版本
当a或c包含更多键时,可借助itertools.permutations直接生成c中所有不重复的有序元素对,简化代码逻辑:
import sympy as sp from itertools import permutations a = {'A': 1, 'D': 1} c = {'B': 1, 'C': 1, 'E': 1} term_wMca = 0 keys_a = set(a.keys()) keys_c = set(c.keys()) for k in keys_a: # 生成c中所有长度为2的不重复元素排列(顺序不同算独立项) for j, l in permutations(keys_c, 2): if k != j and k != l: x_k = sp.symbols(f'x{k}') x_j = sp.symbols(f'x{j}') x_l = sp.symbols(f'x{l}') w_term = sp.symbols(f'W_{l}{j}{k}') term_wMca += x_k * x_j * x_l * w_term print(term_wMca)
内容的提问来源于stack exchange,提问作者user19396094
相关产品推荐
相关产品推荐

