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

如何从含||(或)、&&(与)的逻辑表达式中提取所有可能组合?

逻辑表达式的组合提取问题与解法

问题描述

给定一组包含逻辑运算符的表达式(||表示逻辑或,&&表示逻辑与):

lst = ['(a || b) && (c && d)', '(e && f) || (g || h)', '(i || j) || k']

需要提取所有可能的逻辑组合并生成新列表,预期结果为:

rsltlst = ['a && c && d', 'b && c && d',  'e && f', 'g', 'h', 'i', 'j', 'k']

也可先针对单个表达式处理,例如输入:

s = '(a || b) && (c && d)'

预期得到两个结果:

sol1 = 'a && c && d'
sol2 = 'b && c && d'

解法思路

核心利用逻辑运算的分配律:

  • (A || B) && C 等价于 A&&C 和 B&&C,需要将||的每个子项与其他&&子表达式组合
  • A || B || C 等价于单独的A、B、C,直接拆分即可;若子项是&&组合(如e && f),则保留整体作为一个组合项

代码实现

单个表达式处理函数

from itertools import product

def process_single_expr(expr):
    # 优先处理顶层 && 连接的表达式
    if '&&' in expr:
        # 拆分所有 && 连接的子部分
        sub_exprs = [p.strip() for p in expr.split('&&')]
        options = []
        for sub in sub_exprs:
            # 去除子表达式的外层括号
            clean_sub = sub.strip('()')
            # 若子表达式包含 ||,拆分出所有可选项
            if '||' in clean_sub:
                opts = [o.strip() for o in clean_sub.split('||')]
                options.append(opts)
            else:
                options.append([clean_sub.strip()])
        # 生成所有笛卡尔积组合,用 && 连接
        return [' && '.join(comb) for comb in product(*options)]
    
    # 处理顶层 || 连接的表达式
    elif '||' in expr:
        sub_exprs = [p.strip().strip('()') for p in expr.split('||')]
        result = []
        # 递归处理每个子表达式(处理嵌套情况)
        for sub in sub_exprs:
            result.extend(process_single_expr(sub))
        return result
    
    # 单个变量的情况
    else:
        return [expr.strip().strip('()')]

测试单个表达式

s = '(a || b) && (c && d)'
print(process_single_expr(s))
# 输出: ['a && c && d', 'b && c && d']

批量处理表达式列表

lst = ['(a || b) && (c && d)', '(e && f) || (g || h)', '(i || j) || k']
rsltlst = []
for expr in lst:
    rsltlst.extend(process_single_expr(expr))

print(rsltlst)
# 输出: ['a && c && d', 'b && c && d', 'e && f', 'g', 'h', 'i', 'j', 'k']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:28:15