利用python求相邻数的方法示例
前言
本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
什么是相邻数?
比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数
需求:
遍历inputList所有数字,取出所有数字,判断是否有相邻数,不相邻数字和相邻数字都以“数组”形式添加到outputList中,并且每个“数组”里第一位递减补全两位数,末位递增补全两位数,每一个数不能小于0,不能大于400
(提示:在inputList中"12,13"是相邻的数字,视为一组,需要以[10,11,12,13,14,15]数组形式添加到outputList中,而“3”没有相邻的数,也视为一组,需要以[1,2,3,4,5]数组形式添加到outputList中)
输入:
inputList=[0,3,5,6,7,9,12,13,15,16,17,19,20,21,22,25,27,29,30,32,33,36,39,40,43,44,46,47,48,53,54,57,58,60,62,64,65,66,67,72,74,75,76,77,78,80,82,84,85,86,89,95,96,97,98,103,104,107,108,110,111,114,116,117,118,120,121,122,124,127,132,135,137,138,139,140,145,146,148,149,150,151,155,156,160,161,166,167,170,171,172,175,178,179,180,181,182,183,184,186,188,189,190,193,195,196,198,202,205,208,210,211,213,214,215,217,221,226,227,228,233,234,235,240,241,246,247,249,255,257,258,261,262,263,267,268,269,270,271,272,275,278,280,282,283,284,286,287,289,291,292,295,296,298,300,302,303,304,305,306,310,315,317,319,320,321,322,323,324,325,326,328,331,336,339,341,342,344,346,349,354,355,356,362,363,365,366,367,368,371,374,376,378,382,383,388,390,393,396,399]
输出:
outputList=[[0,1,2],[1,2,3,4,5],[3,4,5,6,7,8,9],[7,8,9,10,11],[10,11,12,13,14,15],........此处省略]
那,如何解决这个问题?
1.设置一个值,指向index=0,start_index=0
2.初始化一个中间列表median=[],一个保存结果列表result_l=[]
3.for循环开始,start_index指向每一个相邻数的开头
4.通过索引指向的值和索引后指向的值进行差值比较,步长不为1的,start_index移动到这个值上
5.循环往复,获得相邻列表
6.通过map函数,对每一个相邻列表进行前后各插入两个相邻数
7.通过列表解析,剔除不满足条件的相邻数
示例代码
#!/usr/bin/python3 __author__='beimenchuixue' __blog__='http://www.cnblogs.com/2bjiujiu/' defgo_cha_ru(new_l): """往列表中前后个插入两个相邻数,通过列表解析去除小于0的和大于400的数""" new_l.insert(0,new_l[0]-1) new_l.insert(0,new_l[0]-1) new_l.append(new_l[len(new_l)-1]+1) new_l.append(new_l[len(new_l)-1]+1) return[iforiinnew_lif0<=i<=400] defgo_xiang_lin(raw_l): """获取相邻数""" start_index=0 result_l=[] median=[] #索引从start_index起,到最后 forraw_indexinrange(len(raw_l)): #判断是否for循环到指定位置 ifstart_index==raw_index: #初始移动位置参数 index=0 whileTrue: #指针指向的起始值 start_value=raw_l[start_index] #如果指针指向最后一个位置,开始值=最后一个值 ifstart_index==len(raw_l)-1: end_value=start_value else: #最后一个值=初始值+位置参数值 end_value=raw_l[start_index+index] #通过初始值+位置参数值是否等于最后一个值,判断是否为相邻数,如果是,添加到中间列表 ifstart_value+index==end_value: median.append(end_value) #位置参数+1 index+=1 else: #如果不是,初始指针指向移动位置参数个单位 start_index+=index #把每主相邻数添加到结果列表 result_l.append(median) median=[] break #通过高阶函数,对结果集中每个相邻数列表进行插值操作 returnmap(go_cha_ru,result_l) if__name__=='__main__': input_list=[0,3,5,6,7,9, 12,13,15,16,17,19,20,21,22,25, 27,29,30,32,33,36,39,40,43,44,46,47,48,53,54, 57,58,60,62,64,65,66,67,72,74,75,76,77,78,80,82, 84,85,86,89,95,96,97,98,103,104,107,108,110,111,114, 116,117,118,120,121,122,124,127,132,135,137,138,139,140, 145,146,148,149,150,151,155,156,160,161,166,167,170,171, 172,175,178,179,180,181,182,183,184,186,188,189,190,193, 195,196,198,202,205,208,210,211,213,214,215,217,221,226, 227,228,233,234,235,240,241,246,247,249,255,257,258,261, 262,263,267,268,269,270,271,272,275,278,280,282,283,284, 286,287,289,291,292,295,296,298,300,302,303,304,305,306, 310,315,317,319,320,321,322,323,324,325,326,328,331,336, 339,341,342,344,346,349,354,355,356,362,363,365,366,367, 368,371,374,376,378,382,383,388,390,393,396,399] #结果 output_list=list(go_xiang_lin(input_list)) print(output_list)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。