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
,检查是否在该索引处找到任何模式,并将0
或1
放入结果列表中。
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中,如何通过匹配原始列表中的字符串模式从字符串列表中提取子列表