[英]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.