Python:数据匹配

| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
实际工作中会遇到对新得到的一串数据,需要判断其中是否包含某些数据,并获取相应的输出,或者需要判断数据中是否包含规定顺序的子数据集,以下用两个自定义函数进行判断。

数据示例

value_namevalue
scr_listy,a,b,c,x,d,e,f,g,a,b,d
patterna,b,c,d,e
accompanyingf,g
sequence[a,b,c],[d,e]

scr_list是待分析列表,若其中包含pattern中的数据,则返回1,若包含accompanying中的数据,则返回2,否则返回0;
还需判断scr_list中是否有满足sequence中顺序要求的数据。

数据匹配

输入示例数据

src_list = ['y','a','b','c','x','d','e','f','g','a','b','d']
pattern = ['a','b','c','d','e']
accompanying = ['f','g']
sequence = [['a,b,c'],['d,e']]

用in判断src_list 中的子数据是否在pattern 和accompanying 中,并输出相应结果。

def pattern_match(src_list,pattern,accompanying):
    pattern_value = []
    for i in range(len(src_list)):
        if src_list[i] in pattern:
            pattern_value.append([src_list[i],1])
        elif src_list[i] in accompanying:
            pattern_value.append([src_list[i],2])
        else:
            pattern_value.append([src_list[i],0])
    return pattern_value

调用函数:

In [1]: pattern_match(src_list,pattern,accompanying)
Out[1]: 
[['y', 0],
 ['a', 1],
 ['b', 1],
 ['c', 1],
 ['x', 0],
 ['d', 1],
 ['e', 1],
 ['f', 2],
 ['g', 2],
 ['a', 1],
 ['b', 1],
 ['d', 1]]

判断顺序

def pattern_sort(src_list,sequence):
    for i in range(len(sequence)):
        a = sequence[i][0]
        y = 0
        for j in range(src_list.count(a)):
            list_tmp = src_list[y:]
            y = list_tmp.index(a)
            if y <= (len(list_tmp) - len(sequence[i])):
                if src_list[y:(y+len(sequence[i]))] == sequence[i]:
                    print('%s在%s中'%(sequence[i],src_list))
                elif j == src_list.count(a):
                    print('顺序未匹配')
                else:
                    pass
            else:
                pass
            y += 1

调用函数:

In [1]: pattern_sort(src_list,sequence)
['a', 'b', 'c']['y', 'a', 'b', 'c', 'x', 'd', 'e', 'f', 'g', 'a', 'b', 'd']['d', 'e']['y', 'a', 'b', 'c', 'x', 'd', 'e', 'f', 'g', 'a', 'b', 'd']
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值