利用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遍历类中所有成员的方法
Mar 18 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
以windows service方式运行Python程序的方法
Jun 03 Python
PyCharm使用教程之搭建Python开发环境
Jun 07 Python
Python Json序列化与反序列化的示例
Jan 31 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
Python中is和==的区别详解
Nov 15 Python
django框架自定义模板标签(template tag)操作示例
Jun 24 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Python3开发环境搭建详细教程
Jun 18 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
深入理解pytorch库的dockerfile
Jun 10 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
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php print EOF实现方法
2009/05/21 PHP
jQuery实现判断滚动条到底部
2015/06/23 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python相似模块用例
2016/03/04 Python
python使用str &amp; repr转换字符串
2016/10/13 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
有趣的python小程序分享
2017/12/05 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
python实现机器人行走效果
2018/01/29 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
初中化学教学反思
2014/01/23 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
社会实践活动报告
2015/02/05 职场文书
男人帮观后感
2015/06/18 职场文书
春季运动会加油词
2015/07/18 职场文书
《观潮》教学反思
2016/02/17 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题