侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   166

前言

本文主要给大家介绍了关于利用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多进程multiprocessing用法实例分析
    下一条:
    Python3.5编程实现修改IIS WEB.CONFIG的方法示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客