如何在嵌套循环中使用while循环实现非同位的颜色与数字组合?
问题解决:生成排除同位置配对的颜色-数字组合
问题需求
需要生成颜色列表与数字列表的所有组合,但同位置的颜色和数字不能配对。例如输入colours = ["grey","black","white"]、numbs = [1,2,3]时,需排除grey,1、black,2、white,3这三组,输出剩余的6组。
原代码问题分析
- 错误地将数字列表转为字符串:
numbs =''.join(map(str, numbs))导致遍历对象变为单个字符,破坏了列表结构,无法通过索引判断位置关系。 - 缺少位置判断逻辑:未过滤颜色和数字同索引的配对,输出了不符合要求的组合。
- 注释的while循环逻辑混乱,对需求无实际帮助。
修正后的代码
def all_combinations(colours, numbs): # 将数字列表元素转为字符串,保留列表结构 num_strs = list(map(str, numbs)) # 遍历每个颜色及其对应索引 for i, colour in enumerate(colours): # 遍历每个数字及其对应索引 for j, numb in enumerate(num_strs): # 跳过同位置的颜色-数字配对 if i != j: print(f"{colour}, {numb}") all_combinations(["grey","black","white"],[1,2,3])
代码说明
- 使用
enumerate同时获取元素与索引,直接通过索引对比判断是否为同位置配对。 - 保留数字的列表结构,避免转为字符串后丢失索引信息。
- 通过
if i != j过滤不符合要求的组合,逻辑简洁高效。
输出结果
运行代码后会得到期望输出:
grey, 2 grey, 3 black, 1 black, 3 white, 1 white, 2
内容的提问来源于stack exchange,提问作者Gabriel Angelos
相关产品推荐
相关产品推荐

