簡體   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