利用python求相邻数的方法示例


Posted in Python onAugust 18, 2017

前言

本文主要给大家介绍了关于利用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/'
 
 
def go_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 [i for i in new_l if 0 <= i <= 400]
 
 
def go_xiang_lin(raw_l):
 """获取相邻数"""
 start_index = 0
 result_l = []
 median = []
  
 # 索引从start_index起,到最后
 for raw_index in range(len(raw_l)):
  # 判断是否for循环到指定位置
  if start_index == raw_index:
   # 初始移动位置参数
   index = 0
   while True:
    # 指针指向的起始值
    start_value = raw_l[start_index]
    # 如果指针指向最后一个位置,开始值=最后一个值
    if start_index == len(raw_l)-1:
     end_value = start_value
    else:
     # 最后一个值 = 初始值 + 位置参数值
     end_value = raw_l[start_index + index]
    # 通过初始值 + 位置参数值 是否等于 最后一个值,判断是否为相邻数,如果是,添加到中间列表
    if start_value + index == end_value:
     median.append(end_value)
     # 位置参数 + 1
     index += 1
    else:
     # 如果不是,初始指针指向 移动位置参数个单位
     start_index += index
     # 把每主相邻数添加到结果列表
     result_l.append(median)
     median = []
     break
 # 通过高阶函数,对结果集中每个相邻数列表进行插值操作
 return map(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)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
python邮件发送smtplib使用详解
Jun 16 Python
Python3标准库总结
Feb 19 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
python中什么是面向对象
Jun 11 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 #Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 #Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 #Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 #Python
Python绑定方法与非绑定方法详解
Aug 18 #Python
python字典DICT类型合并详解
Aug 17 #Python
Python时间的精准正则匹配方法分析
Aug 17 #Python
You might like
第六节--访问属性和方法
2006/11/16 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
PHP7.0版本备注
2015/07/23 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python元组知识点总结
2019/02/18 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
python中的列表与元组的使用
2019/08/08 Python
python super用法及原理详解
2020/01/20 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
八年级语文教学反思
2014/02/11 职场文书
留学推荐信范文
2014/05/10 职场文书
企业环保标语
2014/06/10 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书