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

如何用简洁语句判断三个变量中任意两个相等?多组比较优化

简化多组三元组的重复元素判断

嘿,这个问题我之前也碰到过——一堆三元组的两两相等判断写起来简直是灾难,尤其是变量多的时候。别担心,有几个简洁的办法能帮你搞定!

核心思路:利用集合的去重特性

对于任意三个变量a, b, c,如果其中有任意两个相等,那把它们放进集合后,集合的长度肯定小于3(因为集合自动去重)。所以原来的长条件:

if a == b or a == c or b == c:
    do_something()

可以直接简化成:

if len({a, b, c}) < 3:
    do_something()

放到你的代码示例里,原来的:

if( cube[0] == cube[29] or cube[0] == cube[42] or cube[29] == cube[42] ):

就变成了:

if len({cube[0], cube[29], cube[42]}) < 3:

是不是瞬间清爽多了?

批量处理24个变量(8组三元组)

既然你要处理24个变量,每3个一组,最好的方式是先把所有组整理成一个列表,然后用循环或者any()函数批量检查:

步骤1:整理所有三元组

先把你的8组变量写成一个列表:

# 假设cube是你的变量数组,按需求把每3个一组放进triples列表
triples = [
    (cube[0], cube[29], cube[42]),
    (cube[1], cube[30], cube[43]),
    (cube[2], cube[31], cube[44]),
    # ... 继续补充剩下的5组
]

步骤2:批量检查是否有组存在重复

如果只要任意一组满足条件就执行操作,用any()函数一行搞定:

if any(len(set(triple)) < 3 for triple in triples):
    do_something()

如果需要对每个组单独处理(比如每组满足条件时做不同的逻辑),就用循环遍历:

for group_num, triple in enumerate(triples, start=1):
    if len(set(triple)) < 3:
        print(f"第{group_num}组存在重复元素!")
        # 这里写对应组的处理逻辑

特殊情况:变量是不可哈希类型

如果你的cube元素是列表、字典这类不可哈希的类型(没法直接放进集合),可以用itertools.combinations生成所有两两组合来检查:

import itertools

def has_duplicate_pair(triple):
    # 生成三元组中所有两两组合,检查是否有相等的
    return any(a == b for a, b in itertools.combinations(triple, 2))

# 批量检查的用法和之前一样
if any(has_duplicate_pair(triple) for triple in triples):
    do_something()

这种写法和原逻辑完全等价,但代码可读性和可维护性提升了不止一个档次——以后要调整分组或者修改变量,只需要改triples列表就行,不用在长长的if条件里找半天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:53:35