【python正则表达式 实战示例】求数组全部相邻数据

        本节利用python的正则表达式快速求解数组中相邻数据的位置,含完整的python源码、求解过程和正则表达式详细解析。

1 求解步骤

(1)生成随机数据,x,用于输入与测试。

(2)对原始数据进行从小到大排序,,对排序后的数组利用numpy diff求解前后差值。

(3)将求解的前后差值diff与距离distance进行比较,得到mask,超过距离范围的设置为1,否则为0。

(4)将mask取值转换为字符类型str,由于求解后,差值长度比原有数组长度少了个,因此在列表末尾追加1个1,然后将mask转换为字符串。

(5)利用python正则表达式求解。

(6)返回排序后相邻数据位置索引范围和对应的相邻数据。

2 正则表达式解析

        程序中用到正则表达式re.finditer('0*1', mask),其中re.finditer是指找出字符串中满足条件的所有片段的位置信息和相应片段内容。0*1表示片段由连续n个0和1个1组成,n可以等于0,即包括没有0只有1个1的情况。

        re.finditer和re.findall两者都是查找字符串中满足正则条件的全部内容,区别在于前者既可以得到位置索引,又可以得到片段内容。而findall只能得到片段内容,返回结果是由片段内容组成的列表。

        a*号表示a可以出现0次和多次;a+号表示a至少出现1次,即出现1次或多次;a?号表示a只能出现0次或1次。

        a{n, m}表示a可以出现n到m次,a{n}表示a只能出现n次,a{n,}表示a至少出现n次,没有上限次数。a{0,}相当于a*;a{1,*}相当于a+;a{0,1}相当于a?。

3 参考程序

import re
import numpy as np

def find_near_pos(x, distance=1):
    result = []
    x_sort_index = x.argsort()
    x_sort = x[x_sort_index]
    diff_x = np.diff(x_sort)
    mask = list((diff_x > distance).astype(np.uint8).astype(str))
    mask.append('1')
    mask = ''.join(mask)
    for i in re.finditer('0*1', mask):
        result.append([i.span()[0], i.span()[1], x_sort[i.span()[0]:i.span()[1]]])
    return result

if __name__ == '__main__':
    np.random.seed(5)
    x = np.random.randint(0, 50, 10)
    print('原始数据:', x)
    res = find_near_pos(x, 5)
    print('求解结果:', res)
    x.sort()
    print('排序数据:', x)

4 求解结果

【python三维深度学习】python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_python 三维点云

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding的叶子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值