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

如何高效将Python二维列表元素替换为相邻字母对求和值

解决二维字符串列表相邻字母对价值求和问题

问题背景

给定二维字符串列表lst2和存储相邻字母对价值的矩阵value_matrix,需要将lst2中每个字符串替换为其所有相邻字母对的价值之和。

输入示例:

lst2 = [['acba', 'ca'],   ['babab', 'ca', 'bc']]
value_matrix = [['aa', 0], ['ab', 3], ['ac', 5], ['ba', 2], ['bb', 0], ['bc', 9], ['ca', 7], ['cb', 4], ['cc', 0]]

预期输出:

new_lst2 = [[11, 7],   [10, 7, 9]]

解决方案

核心思路是先将价值矩阵转换为字典(实现快速查找),再遍历每个字符串计算相邻对的价值总和,最后用嵌套列表推导式生成结果。

步骤1:将价值矩阵转为字典

把value_matrix转换成键为字母对、值为对应分数的字典,这样查找字母对价值的时间复杂度为O(1),远优于遍历列表的方式。

value_dict = {pair: score for pair, score in value_matrix}

步骤2:编写单个字符串的求和函数

对给定字符串,遍历所有相邻字符对并累加对应价值:

def calculate_pair_sum(s):
    total = 0
    # 遍历从第0个到倒数第2个字符,取当前字符与下一个字符组成对
    for i in range(len(s) - 1):
        pair = s[i] + s[i+1]
        total += value_dict[pair]
    return total

步骤3:生成结果列表

用嵌套列表推导式遍历原二维列表,对每个字符串应用求和函数:

new_lst2 = [[calculate_pair_sum(s) for s in sublist] for sublist in lst2]

完整代码及验证

整合所有部分后运行,即可得到预期结果:

lst2 = [['acba', 'ca'],   ['babab', 'ca', 'bc']]
value_matrix = [['aa', 0], ['ab', 3], ['ac', 5], ['ba', 2], ['bb', 0], ['bc', 9], ['ca', 7], ['cb', 4], ['cc', 0]]

# 转换为字典
value_dict = {pair: score for pair, score in value_matrix}

def calculate_pair_sum(s):
    total = 0
    for i in range(len(s) - 1):
        pair = s[i] + s[i+1]
        total += value_dict[pair]
    return total

# 生成结果
new_lst2 = [[calculate_pair_sum(s) for s in sublist] for sublist in lst2]
print(new_lst2)  # 输出: [[11, 7], [10, 7, 9]]

关键细节说明

  • 字典转换:利用Python字典推导式快速完成矩阵到字典的映射,避免重复遍历value_matrix。
  • 相邻对遍历:长度为n的字符串有n-1个相邻字符对,因此循环范围设为len(s)-1。
  • 嵌套列表推导式:用简洁的语法替代多层for循环,高效完成二维列表的转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:34:51