[英]Search replace patterns in a Python list
我有一個Rubik的Cube運動列表和一個像這樣的快捷方式字典:
mvts = ['U', 'U', 'R', 'Ri', 'L2', ...]
shortcuts = {'UU' : 'U2', 'RRi' : '', ...}
我正在嘗試根據shortcuts
的內容在mvts
列表上應用“搜索並替換”。
這是示例中的結果:
mvts = ['U2', 'L2', ...]
我正在使用Python3,不能使用從頭開始沒有Python附帶的庫。
我被卡住了。 我可以在String
上使用一些正則表達式來執行此操作,但是在我的列表中看不到如何快速進行此搜索。
嘗試這個 :
for i in range(len(mvts)):
if(mvts[i] in shortcuts):
mvts[i] = shortcuts[mvts[i]]
注意
如果您已經確定字典中存在列表元素,則可以刪除if
行
如果要刪除列表中的重復項:
mvts = list(set(mvts))
您可以使用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']
我通過仔細搜索以下術語找到了一種解決方案:“在列表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
感謝@ martin-konecny和@arman的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.