如何根据字符串的三进制值将列表中的位置分配给字符串?

How do I assign a position in a list to a string based on its trinary value?

我正在编写一个程序来构造一个有向图,其节点将是 3 个字母的字符串,这些字符串是所有可能的字母组合集合的元素:'Q'、'W',和 'E'(例如,一个节点将包含 'WEW' 和另一个 'EWW')。

每个组合只代表一次,共计 27 个节点。每个节点将有 3 条边将它连接到其他三个组合,可以通过从右侧推动 'Q'、'W' 或 'E' 并弹出最左边的字母(例如,'QQW' 会将边指向 'QWQ'、'QWW' 和 'QWE')。

为了实现这个,我有了使用 Python 字典的想法,并且认为决定哪个字符串与哪个节点匹配的一个聪明方法是使用一个三进制数系统,其中 'Q' = 0、'W' = 1 和 'E' = 2。这样节点就有了逻辑顺序,我可以使用循环来进行分配,而不必将我的程序基于大量的 81 元素字典(例如,key = 'QQW',value = ['QWE','QWQ','QWW'] 重复所有 27 种组合),我不得不努力-代码。

我将如何使用三进制数系统的思想以一种不仅仅是我编码的方式完成这项任务:'QQQ' = 0,'QQW' = 1, 'QQE' = 2 等等?换句话说,我如何告诉程序 'Q' = 0, 'W' = 1, 'E' = 2 以便在 for 循环中我可以说一些简单的事情,例如:

for i in 0:26
list[i] = "appropriate string corresponding to the trinary value of i" 

谢谢!

最后一个位置值 1*char_value 其中 char_value Q 为 0,W 为 1,E 为 2。中间位置值 3*char_value,第一个 9*char_value.通常 3**i * char_value 其中 i 是从右边算起的位置(3**i 是 3 的 i 次方)。

def triple_value(triple):
    char_value = {
        'Q': 0,
        'W': 1,
        'E': 2}

    return sum(3**i * char_value[c]
               for i, c in enumerate(reversed(triple)))

for t in ['QQQ', 'QQW', 'EEW', 'EEE']:
    print(t, triple_value(t))

QQQ 0
QQW 1
EEW 25
EEE 26