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

Python字母数字映射赋值 多字符排列去重功能实现问题

字母数值分配

现有一套为字母分配对应数值的程序,单字母映射场景下运行正常:输入ABC时可正确输出[1,2,3],但处理多字母场景时存在异常,无法得到符合规则的结果。

多字母处理规则

  • 优先校验双字母组合,第一步先生成输入字符串的所有排列,以输入ABC为例,初始全排列如下:
ABC
ACB
BAC
BCA
CAB
CBA
  • 数值计算依赖两套映射表:
    • alphabet:单字母映射表
    • alphabet1:双字母映射表
    • 匹配优先级:优先匹配双字母组合取值,剩余未匹配的单字符按单字母表取值。
  • 排列拆分要求:以输入ABC为例,所有排列需按优先匹配双字母的规则拆分为如下形式:
AB C
AC B
BA C
BC A
CB A
  • 结果去重规则:各拆分项计算数值后,删除数值结果重复的项——仅拆分顺序不同但数值列表完全一致的属于重复项,例如AB C与BA C数值均为[2,3]、BC A与CB A数值均为[4,1],去重后ABC的预期最终结果为:
AB C = [2,3] 
BC A = [4,1]
  • 长字符串适配要求:逻辑需支持任意长度字符串处理:
    • 例如ABCD需递归匹配双字母组合后,剩余字符走单字母映射
    • 重复字符场景下ABAB输出为[2,2],ABABA输出为[2,2,1]

现有实现代码

import itertools

alphabet = {
    "A": 1,
    "B": 2,
    "C": 3,
    "D": 4,
    "E": 5,
    "F": 6,
    "G": 7,
    "H": 8,
    "I": 9,
    "J": 10,
    "K": 11,
    "L": 12,
    "M": 13,
    "N": 14,
    "O": 15,
    "P": 16,
    "Q": 17,
    "R": 18,
    "S": 19,
    "T": 20,
    "U": 21,
    "V": 22,
    "W": 23,
    "X": 24,
    "Y": 25,
    "Z": 26,
    "": 0
}

alphabet1 = {
    "AA": 1,
    "AB": 2,
    "BB": 3,
    "BC": 4,
    "CC": 5,
    "CD": 6,
    "DD": 7,
    "DE": 8,
    "EE": 9,
    "EF": 10,
    "FF": 11,
    "FG": 12,
    "GG": 13,
    "GH": 14,
    "HH": 15,
    "HI": 16,
    "II": 17,
    "IJ": 18,
    "JJ": 19,
    "JK": 20,
    "KK": 21,
    "KL": 22,
    "LL": 23,
    "LM": 24,
    "MM": 25,
    "MN": 26,
    "NN": 27,
    "NO": 28,
    "OO": 29,
    "OP": 30,
    "PP": 31,
    "PQ": 32,
    "QQ": 33,
    "QR": 34,
    "RR": 35,
    "RS": 36,
    "SS": 37,
    "ST": 38,
    "TT": 39,
    "TU": 40,
    "UU": 41,
    "UV": 42,
    "VV": 43,
    "VW": 44,
    "WW": 45,
    "WX": 46,
    "XX": 47,
    "XY": 48,
    "YY": 49,
    "YZ": 50,
    "ZZ": 51
}
  
def gen_combination_values(n):
    comb_values = {}
    for i in range(n + 1):
        for product in itertools.product(alphabet.keys(), repeat=i):
            prod = list(product)
            prod.sort()
            value = 0
            comb = ""
            for char in product:
                value += alphabet[char]
                comb += char
            try:
                comb_values[value].add(comb)
            except KeyError:
                comb_values[value] = set()
                comb_values[value].add(comb)
    print(comb_values)
    return comb_values


def gematria(word):
    result = 0
    for char in word:
        result += alphabet[char]
    return result


def combinations_w(word):
    """returns all possible word with replacement by each letter value """
    letters_values = []
    for c in word:
        print(c)
        letters_values.append(alphabet[c])
    word_poss = []
    for l_value in letters_values:
        word_poss.append(list(values[l_value]))
    poss = []
    for i in set(itertools.product(*word_poss)):
        poss.append("".join(i))
    return poss


if __name__ == '__main__':
    values = gen_combination_values(1)
    for i in combinations_w("JE"):
        print(i)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:36:25