python中列表中的模式匹配

Posted

技术标签:

【中文标题】python中列表中的模式匹配【英文标题】:pattern matching in a list in python 【发布时间】:2021-10-13 12:43:18 【问题描述】:

我有一个清单:

l= [3, 0, 6, 4, 3, 0, 6, 4, 3, 0, 6, 4, 3, 0, 6, 4, 3, 0, 6, 3, 4]

现在我想检查从 index(x) 到 index(x+1) 是否属于以下任何一个 pattern_list pattern=['03','34','46','60']。 如果存在,则创建另一个列表 k,其中值以 0 或 1 的形式存储,这意味着 0 没有模式和 1 模式存在。 例如

k=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]

我试过了:

s_1_list=[]
str_1 = ""

for i in l:
    str_1 += str(i)
      
regexList_1= ['03','34','46','60']
for regex in regexList_1:
    s_1 = str_1.count(regex)
    s_1_list.append(s_1)
    print("Number of times " + regex + " repeated= ", s_1)

输出:

Number of times 03 repeated=  0
Number of times 34 repeated=  1
Number of times 46 repeated=  0
Number of times 60 repeated=  0

但这并没有根据需要给我一个新列表,并带有以下输出,有人可以建议如何进行吗?

【问题讨论】:

您使用的是简单的固定字符串,而不是正则表达式。 【参考方案1】:

这是我的解决方案。

pattern = ['03', '34', '46', '60']
l = [3, 0, 6, 4, 3, 0, 6, 4, 3, 0, 6, 4, 3, 0, 6, 4, 3, 0, 6, 3, 4]
k = []

for i in range(len(l) - 1):
    temp = ''
    temp += str(l[i]) + str(l[i + 1])
    if temp in pattern:
        k.append(1)
    else:
        k.append(0)
print(k)

【讨论】:

【参考方案2】:

遍历s1,检查是否在该索引处找到任何模式,并将01 放入结果列表中。

s_1_list = [1 if str_1[i:i+2] in regexList_1 else 0 for i in range(len(str_1)-1)]

【讨论】:

这行得通,我会要求您编辑答案并在范围内添加缺少的括号。

以上是关于python中列表中的模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

在python中,如何通过匹配原始列表中的字符串模式从字符串列表中提取子列表

如何改进 Python 中列表的模式匹配

Python结构模式匹配中如何区分元组和列表?

使用模式匹配交换列表中的元素对

如何找到输入列表的匹配模式,然后使用 python 用正确的模式转换替换找到的模式

F# : list.[(argument)..] 匹配模式中的错误