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

Python打印Sobert口味组合出现重复配对及代码逻辑咨询

Sorbet口味组合重复打印问题原理讲解

原始代码产生重复的原因

你的原始代码是两层完整遍历FLAVORS列表的嵌套循环,只要两个元素不相等就打印,本质是生成有序排列:

  • 当外层循环取到Banana、内层取到Chocolate时,会打印Banana, Chocolate
  • 当外层循环取到Chocolate、内层取到Banana时,满足x != y的判断,会再次打印Chocolate, Banana
    两种顺序的同一组合都会被输出,就产生了重复。

无重复代码的实现逻辑

这段代码的核心逻辑是:强制让配对里的第一个口味在列表中的位置,永远排在第二个口味前面,从根源上避免反向重复的情况:

  1. 外层循环每次取一个口味flavor_one,先用FLAVORS.index(flavor_one)拿到这个口味在列表里的下标,比如Banana的下标是0,Chocolate的下标是1
  2. 内层循环的遍历范围是range(当前口味下标 + 1, 列表总长度),也就是只遍历排在flavor_one后面的所有口味:
    • 当flavor_one是Banana(下标0)时,内层只遍历下标1到6的口味,生成Banana和后面所有口味的配对
    • 当flavor_one是Chocolate(下标1)时,内层只遍历下标2到6的口味,只会生成Chocolate和后面口味的配对,不会再回头和前面的Banana配对
      这样所有输出的配对都是「列表位置靠前的口味 + 列表位置靠后的口味」,自然就不会出现反向重复的配对了。

更简洁的标准库实现

Python标准库内置了生成无重复组合的工具,效果和上面的代码完全一致:

from itertools import combinations

FLAVORS = [
    "Banana",
    "Chocolate",
    "Lemon",
    "Pistachio",
    "Raspberry",
    "Strawberry",
    "Vanilla",
]

for pair in combinations(FLAVORS, 2):
    print(", ".join(pair))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:30:04