利用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中操作文件之write()方法的使用教程
May 25 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
对python多线程与global变量详解
Nov 09 Python
Django后台管理系统的图文使用教学
Jan 20 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Python while true实现爬虫定时任务
Jun 08 Python
python字典与json转换的方法总结
Dec 28 Python
10张动图学会python循环与递归问题
Feb 06 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
php基础学习之变量的使用
2011/06/09 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
vue移动端路由切换实例分析
2018/05/14 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
2019/01/18 jQuery
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
家居饰品店创业计划书
2014/01/31 职场文书
爱心捐助倡议书
2014/05/19 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
鸦片战争观后感
2015/06/09 职场文书
谢师宴家长答谢词
2015/09/30 职场文书