我有一份魔方的立方体动作列表和一个这样的快捷方式词典:
static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
struct in6_addr *daddr,
__u32 len,
unsigned short proto,
unsigned int sum)
{
__asm__("
addl 0(%1), %0 //line 162
adcl 4(%1), %0
adcl 8(%1), %0
adcl 12(%1), %0
adcl 0(%2), %0
adcl 4(%2), %0
adcl 8(%2), %0
adcl 12(%2), %0
adcl %3, %0
adcl %4, %0
adcl $0, %0
" // line 173
: "=&r" (sum)
: "r" (saddr), "r" (daddr),
"r"(htonl(len)), "r"(htonl(proto)), "0"(sum));
return csum_fold(sum);
}
我要做的是应用"搜索并替换"在mvts = ['U', 'U', 'R', 'Ri', 'L2', ...]
shortcuts = {'UU' : 'U2', 'RRi' : '', ...}
列表中,基于mvts
的内容。
以下是示例中的结果:
shortcuts
我使用Python3而且我无法使用从头开始不带Python的库。
我被困住了。我可以使用mvts = ['U2', 'L2', ...]
上的一些正则表达式执行此操作,但我不知道如何在我的列表中快速进行此搜索。
答案 0 :(得分:1)
试试这个:
for i in range(len(mvts)):
if(mvts[i] in shortcuts):
mvts[i] = shortcuts[mvts[i]]
<强>通知强>
如果您已经确定字典中存在列表元素,则可以删除if
行
如果你想在列表中删除重复:
mvts = list(set(mvts))
答案 1 :(得分: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']
答案 2 :(得分:0)
我通过google搜索好的术语找到了解决方案:&#34;搜索/替换列表Python中的子列表&#34;。
所以我在这里解释了@ 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的帮助!