利用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中使用MELIAE分析程序内存占用实例
Feb 18 Python
Python实现的质因式分解算法示例
May 03 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
python 统计文件中的字符串数目示例
Dec 24 Python
Python操作注册表详细步骤介绍
Feb 05 Python
Python接口测试文件上传实例解析
May 22 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
python 合并多个excel中同名的sheet
Jan 22 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
python类装饰器用法实例
2015/06/04 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
爱我中华演讲稿
2014/05/20 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
优秀教师事迹材料
2014/12/15 职场文书
质检员岗位职责范本
2015/04/07 职场文书
公司门卫岗位职责
2015/04/13 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
停发工资证明范本
2015/06/12 职场文书
nginx共享内存的机制详解
2022/03/21 Servers
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技