繁体   English   中英

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

[英]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',我必须对所有27种组合重复使用value = ['QWE','QWQ','QWW']。

我将如何使用三进制数系统的思想来完成此任务,而不仅仅是我编码为:'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 ,其中Q的char_value为0,W的为1,E的为2。中间位置的价值为3*char_value ,前一个价值9*char_value 通常3**i * char_value ,其中i是从右边开始计数的位置( 3**i是3 3**i * char_value 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM