如何遍历两行单1三列单元格的全部9种二进制组合?
遍历两行三列的所有9种单1组合实现方案
这个需求其实很简单,本质就是求两行独立选择的笛卡尔积——第一行的3种可能(A1=1、B1=1、C1=1)和第二行的3种可能两两组合,刚好覆盖全部9种情况。
所有组合的直观展示
先给你列全所有9种情况,方便你对照:
- 第一行A=1,第二行A=1
- 第一行A=1,第二行B=1
- 第一行A=1,第二行C=1
- 第一行B=1,第二行A=1
- 第一行B=1,第二行B=1
- 第一行B=1,第二行C=1
- 第一行C=1,第二行A=1
- 第一行C=1,第二行B=1
- 第一行C=1,第二行C=1
代码实现(Python)
我给你写两种实现方式,一种用标准库简化代码,一种手动循环更直观:
方式1:用itertools.product生成笛卡尔积
这个方法最简洁,直接调用库函数生成所有组合:
import itertools # 定义每行的三种可能:依次对应[A列=1, B列=1, C列=1] row_options = [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ] # 生成两行所有可能的组合(笛卡尔积) all_combinations = itertools.product(row_options, repeat=2) # 格式化输出成你给的表格样式 print(" A B C") print("+---+---+---+") for combo_idx, (row1, row2) in enumerate(all_combinations, start=1): print(f"{combo_idx} | {row1[0]} | {row1[1]} | {row1[2]} |") print("+---+---+---+") print(f"2 | {row2[0]} | {row2[1]} | {row2[2]} |") print("+---+---+---+") print() # 空行分隔不同组合
方式2:手动嵌套循环(无需库依赖)
如果不想用第三方库,直接嵌套两个for循环也能实现:
# 定义每行的三种可能 row_options = [ [1, 0, 0], [0, 1, 0], [0, 0, 1] ] print(" A B C") print("+---+---+---+") combo_count = 0 # 遍历第一行的所有可能 for row1 in row_options: # 对每种第一行的情况,遍历第二行的所有可能 for row2 in row_options: combo_count += 1 print(f"{combo_count} | {row1[0]} | {row1[1]} | {row1[2]} |") print("+---+---+---+") print(f"2 | {row2[0]} | {row2[1]} | {row2[2]} |") print("+---+---+---+") print()
核心思路
不管用哪种方式,核心逻辑都是:
- 先定义每行的3种合法状态(只有一个1,其余为0)
- 遍历第一行的每个状态,对每个状态再遍历第二行的所有状态,这样3×3=9种组合就全部被覆盖了。
内容的提问来源于stack exchange,提问作者juicebox49
相关产品推荐
相关产品推荐

