搜索Python列表中的替换模式

时间:2016-01-09 20:58:09

标签: python

我有一份魔方的立方体动作列表和一个这样的快捷方式词典:

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', ...] 上的一些正则表达式执行此操作,但我不知道如何在我的列表中快速进行此搜索。

3 个答案:

答案 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的帮助!