加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-17 08:10:54 所属栏目:Python 来源:网络整理
导读:前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判

前言

本文主要给大家介绍了关于利用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,5,6,7,9,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,5],[3,8,9],[7,10,11],[10,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,120,221,323,399]
 # 结果
 output_list = list(go_xiang_lin(input_list))
 print(output_list)

总结

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读