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

如何基于字符串组合列表生成符合规则的Python矩阵

高效生成目标矩阵的实现方案

嘿,我看你之前生成目标列表的代码绕了不少弯路,而且矩阵生成效率很低,咱们来把整个流程优化得简洁又高效~

第一步:优化生成目标字符串列表

你原来用itertools.permutations加额外的0再做过滤处理,其实完全可以用itertools.product直接生成包含自身组合的2长度笛卡尔积,一行代码就能得到你需要的16个元素列表:

import itertools
# 直接生成所有2长度组合(含自身重复),并转换为字符串列表
target_list = [''.join(pair) for pair in itertools.product('ABCD', repeat=2)]

生成的target_list就是你需要的:
['AB', 'AC', 'AD', 'BA', 'BC', 'BD', 'CA', 'CB', 'CD', 'DA', 'DB', 'DC', 'AA', 'BB', 'CC', 'DD']
这个方法没有多余的循环和过滤操作,效率比原来的实现高很多。

第二步:高效生成规则矩阵

接下来我们按照规则生成矩阵,核心思路是先建立字符到列索引的映射,然后通过索引快速定位需要修改的位置,避免不必要的遍历:

# 建立字符与列索引的映射,方便快速定位列位置
char_index_map = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
result_matrix = []

for s in target_list:
    # 初始化每行所有元素为2
    current_row = [2] * 4
    idx1 = char_index_map[s[0]]
    idx2 = char_index_map[s[1]]
    
    if s[0] == s[1]:
        # 字符串两个字符相同,对应列设为1
        current_row[idx1] = 1
    else:
        # 字符串两个字符不同,对应两列设为3
        current_row[idx1] = 3
        current_row[idx2] = 3
    
    # 将字符串本身加入行首,和示例格式保持一致
    result_matrix.append([s] + current_row)

验证输出结果

如果要打印出和你示例一致的格式,可以用下面的代码:

for row in result_matrix:
    print(' '.join(map(str, row)))

输出结果会完全符合你的要求,比如:

AB 3 3 2 2
AC 3 2 3 2
AD 3 2 2 3
BA 3 3 2 2
BC 2 3 3 2
BD 2 3 2 3
CA 3 2 3 2
CB 2 3 3 2
CD 2 2 3 3
DA 3 2 2 3
DB 2 3 2 3
DC 2 2 3 3
AA 1 2 2 2
BB 2 1 2 2
CC 2 2 1 2
DD 2 2 2 1

整个实现的时间复杂度是O(n)(n为元素个数16),每个步骤都没有冗余操作,相比你之前的手动式实现效率提升非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:17