python整合连续数字的练习,包含itertools\groupby用法

#汉字数字转阿拉伯数字 1 class ConvertNum:
 2     def __init__(self,cnNum):
 3       self.dict =   {u‘零‘:0,u‘一‘:1,u‘二‘:2,u‘三‘:3,u‘四‘:4,u‘五‘:5,u‘六‘:6,u‘七‘:7,u‘八‘:8,u‘九‘:9,u‘十‘:10,u‘百‘:100,u‘千‘:1000,u‘万‘:10000}
 4       self.cnNum = cnNum
 5
 6     def convert(self):
 7         count = 0
 8         result = 0
 9         tmp = 0
10
11         while count < len(self.cnNum):
12         tmpChr = self.cnNum[count:count+1]
13         tmpNum = self.dict[tmpChr]
14
15         if tmpNum == 10000:
16             result = result + tmp
17             result = result * tmpNum
18         elif tmpNum >= 10:
19             if tmp==0:
20               tmp = 1
21             result = result + tmpNum * tmp
22             tmp = 0
23         else:
24             tmp = tmpNum
25             count = count + 1
26             result = result + tmp
27         return result                    
 1 import re
 2 from convertNum import ConvertNum
 3 from itertools import *
 4 list_a = [u‘中华一村‘,u‘中华二村‘,u‘中华三村‘,u‘中华十二村‘,u‘中华五村‘,u‘中点开‘,u‘大地三街‘,u‘大地二街‘,u‘中华七村‘,u‘中华八村‘,u‘中华九村‘]
 6     patternCombineHz = re.compile(ur‘(.*?)([一二三四五六七八九十]+)([村街巷连])$‘)
 7     l,dicts = [],[]
 8     for item in list_a:
 9         m = patternCombineHz.search(item)     #获取数字信息
10         if m:
11             dict = {‘headFootText‘:(m.group(1),m.group(3)),‘numText‘:m.group(2)}
12             dicts.append(dict)
13         else:
14             l.append(item)
15     dictHead = {}
16     for dict in dicts:     #生成头尾为key,数字为value的字典
17         if dictHead.has_key(dict.get(‘headFootText‘)):
18             dictHead[dict.get(‘headFootText‘)].append(dict.get(‘numText‘))
19         else:
20             dictHead[dict.get(‘headFootText‘)] = [dict.get(‘numText‘)]
21     for key,value in dictHead.items():
22         dictNum = {}
23         for i in value:
24             dictNum[ConvertNum(i).convert()] = i
25         sortalbNum = sorted([ConvertNum(i).convert() for i in value])   #汉字转换阿拉伯数字后排序
26         newNum = []
27         #排序后列表元素减去索引号,判断是否等差,并分组生成迭代器,每一组表示连续数字
28         for k,g in groupby(enumerate(sortalbNum),lambda (i,x):x-i):
29             gb = [t[1] for t in g]
30             mingb,maxgb = min(gb),max(gb)
31             if maxgb-mingb>1:
32                 combineStr = u‘~‘.join(map(lambda num:dictNum.get(num),[mingb,maxgb]))
33                 newNum.append(combineStr)
34             else:
35                 newNum.extend(map(lambda num:dictNum.get(num),gb))
36         # newNum = [dictNum.get(num) for num in sortalbNum]
37         if len(newNum) == 1 and not u‘~‘ in newNum[0]:
38             combineAddr = u‘%s%s%s‘ % (key[0],u‘、‘.join(newNum),key[1])
39         else:
40             combineAddr = u‘%s(%s)%s‘ % (key[0],u‘、‘.join(newNum),key[1])
41         l.append(combineAddr)
42
43     for i in l:
44         print i

output:>>>>>>>>

中点开
中华(一~三、五、七~九、十二)村
大地(二、三)街

python整合连续数字的练习,包含itertools\groupby用法

时间: 2024-09-29 20:07:56

python整合连续数字的练习,包含itertools\groupby用法的相关文章

【python】获取列表中最长连续数字

最近开发遇到一个功能需求,目的是要获取一个AI分析结果中最长连续帧,比如一个视频中连续3帧有人,那么我认为这个视频就是有人,我就要判断这个视频帧列表中是否有连续的三帧有人.本质就是获取列表中的最长连续数字,比如有一个列表 a = [1,2,3,4,1,2,3],要获取这个列表中最长连续数字,应该是[1,2,3,4]. 拓展,比如我想获取每隔n的最长连续数字怎么办?例如:b = [1,3,5,7,9,1,4,7,10],我想获取每隔2的最长连续数字,应该是[1,3,5,7,9],我想获取每隔3的最

Python学习_02_数字和运算

python具有强大的科学运算功能,python由于支持更加强大的面向对象和动态特性,相比R语言.matlab.mathmatic等传统的科学计算工具具有非常大的优势. Python的数字 python中的数字提供了标量的存储和直接访问,并且是不可更改的类型,对数字的更改实际上是创建了一个新的数字对象,而原来的数字对象当其引用次数为0时,会被垃圾回收机制回收,通过del 关键字可以删除一个对象的引用. 布尔类型:在python2.3之后开始支持,布尔类型只有两个值:True和False. 整形.

Python 手写数字识别-knn算法应用

在上一篇博文中,我们对KNN算法思想及流程有了初步的了解,KNN是采用测量不同特征值之间的距离方法进行分类,也就是说对于每个样本数据,需要和训练集中的所有数据进行欧氏距离计算.这里简述KNN算法的特点: 优点:精度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 适用数据范围:数值型和标称型(具有有穷多个不同值,值之间无序)    knn算法代码: #-*- coding: utf-8 -*- from numpy import * import operatorimport

python 数据类型之数字

一.数字类型 Python 支持多种数字类型,包括:整型.长整型.布尔型.双精度浮点型.十进制浮点型. 复数. 1.整型:最通用的数字类型,在32位机上,范围 -2147483648 - 2147483647 (即 -231 - 231-1 ) 2.布尔型:只有两个取值,True 和 False 3.长整型: 用大写字母 "L" 表示  (整型和长整形统一,当数值大写超出整型的范围时,不再溢出,而是自动转化为长整形) 4.双精度: 类似C中的double,可以十进制或者科学计数法表示,

找出数组中最长的连续数字序列(JavaScript实现)

原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: 1 function maxSequence(array,step){ 2 var _array = array.slice(), //clone array 3 _step = 1, 4 _arrayTemp = [], 5 i = 0; 6 7 var parseLogic = { 8 //result c

【转】Python数据类型之“数字(numerics)”

[转]Python数据类型之“数字(numerics)” 上一节内容说的是“Python基本语法”,本节主要讲下Python中的数据类型. 存储在内存中的数据通常有两个属性: 在内存中的存放位置:这个存放位置通过变量名可以找到: 在内存中的存放方式:这个由数据类型决定,如占几个字节的空间.占用空间是否需要连续等. Python中有很多内置类型(built-in types),内置类型可以理解为构建在Python Interpreter(Python解释器)里面的类型.Python中主要的内置类型

python学习之数字

数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮点数复数固定精度的十进制数有理分数集合布尔类型无穷的整数精度各种数字的内置模块和函数 数字常量1234,0,999999        整数(无穷大小)1.23,45.6        浮点数0177,0x9ff,0b101010    八进制,十六进制,二进制2.6版本0o177,0x9ff,0b

vim生成连续数字列

功能描述:在vim中插入连续数字列 比如 1, 2, 3, 4, 5, ... 100, 命令:使用q命令录制自己的动作序列然后重复执行 准备工作: 首先输入起始数字,比如这里输入1和逗号,光标在当前行 动作序列如下: 1. normal模式下qa    即将动作记录放入寄存器a中,可以根据自己偏好使用寄存器 2. Y    复制整行 3. p    粘贴到下一行 4. f ,    向右查找到逗号, 5. h    光标右移一个字符 6. ctrl + a   数值加1 7. q    退出记

python第二周 数字类型

数字类型 Python中,数字并不是一个真正的对象类型,而是一组类似类型的分类.Python不仅支持通常的数字类型(整数和浮点数),而且能够通过常量去直接创建数字以及处理数字的表达式,还通过模块和第三方库提供更多的数字类型支持.Python数字类型的完整工具包括: 整数和浮点数 复数(需要模块支持) 固定精度的十进制数 有理分数 集合 布尔类型 无穷的整数精度 各种数字内置函数和模块 处理数字对象的工具: 表达式操作符:+.-.*././/.>>.**.& 内置数学函数:pow.abs