2016-01-09 25 views
0

我有魔方運動的列表和快捷鍵像這樣的詞典:搜索替換的模式在Python列表

mvts = ['U', 'U', 'R', 'Ri', 'L2', ...] 
shortcuts = {'UU' : 'U2', 'RRi' : '', ...} 

我試圖做的是應用在一個「查找和替換」 mvts根據shortcuts的內容列表。

下面是結果將在例如什麼:

mvts = ['U2', 'L2', ...] 

我使用Python3,我不能使用不從頭來與Python庫。

我被卡住了。我可以在String上用一些正則表達式來做到這一點,但我不明白如何在我的列表中快速找到這個搜索。

回答

0

我已經與良好的條件google搜索找到了解決辦法: 「在Python列表中搜索/替換子列表」。

所以我用@ latty的解決方案在這裏解釋https://stackoverflow.com/a/12898180/2058840

我有我的字典結構變更爲:

shortcuts = {'U U' : ['U2'], 'R Ri' : '', ...} 

然後:

for (sublist, shortcut) in shortcuts: 
    replace_list(mvts, sublist.split(), shortcut) #@latty's function 

感謝@馬丁 - Konecny的和@arman對你有所幫助!

0

你可以使用re.sub

import re 

mvts = ['UUU', 'U', 'R', 'Ri', 'L2'] 
shortcuts = {'UU' : 'U2', 'RRi' : ''} 

def do_sub(m): 
    for k, v in shortcuts.items(): 
     m = re.sub(k, v, m) 
    return m 

[do_sub(m) for m in mvts] 

輸出:

['U2U', 'U', 'R', 'Ri', 'L2'] 
+0

謝謝@ martin-konecny,但是我沒有在'mvts'中直接使用'UUU',所以我不能在每個列表單元格上使用re。我改爲['U','U','U',...]。我將尋找一種將連續相同單元分組的方法。 –

+0

好吧,我已經找到了一種方法,用'itertools.groupby'將'['U',U',...]'分組到'['UU']'中,然後使用're'。但是我不會將['Ri','R',...]分組,例如。 –

1

試試這個:

for i in range(len(mvts)): 
     if(mvts[i] in shortcuts): 
      mvts[i] = shortcuts[mvts[i]] 

注意

如果你已經肯定列表元素在字典中,你可以刪除if

,如果你想在列表中刪除重複:

mvts = list(set(mvts)) 
+0

謝謝@arman。你的代碼並沒有真正做我所需要的,因爲mvts [i] - 這是一個單一的改進 - 並不是捷徑。但是,例如,也許mvts [i] + mvts [i + 1]。 –