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

2024-10-01 22:36:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

对于总共27个节点,每个组合只表示一次。每个节点将有3条边,将其连接到其他三个组合,通过从右侧按“Q”、“W”或“E”并弹出最左侧的字母(例如,“QQW”将边指向“QWQ”、“QWW”和“QWE”),可以将其转换为其他三个组合

为了实现这一点,我想到了使用Python字典,并认为决定哪个字符串与哪个节点匹配的一个聪明方法是使用三元数系统,其中“Q”=0,“W”=1,这样就可以对节点进行逻辑排序,我可以使用一个循环来进行赋值,而不必将我的程序建立在大量的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" 

谢谢


Tags: 字符串程序元素编码for字典节点value
1条回答
网友
1楼 · 发布于 2024-10-01 22:36:11

最后一个位置值1*char_value,其中charu值为0表示Q,1表示W,2表示E。中间位置值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

相关问题 更多 >

    热门问题