如何用简洁语句判断三个变量中任意两个相等?多组比较优化
简化多组三元组的重复元素判断
嘿,这个问题我之前也碰到过——一堆三元组的两两相等判断写起来简直是灾难,尤其是变量多的时候。别担心,有几个简洁的办法能帮你搞定!
核心思路:利用集合的去重特性
对于任意三个变量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
相关产品推荐
相关产品推荐

