什么是相邻数?

  比如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_求相邻数的更多相关文章

  1. poj3254 Corn Fields 利用状态压缩求方案数;

    Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10658   ...

  2. 帮初学者改代码——playerc之“练习:求完数问题”(下)

    前文链接:帮初学者改代码——playerc之“练习:求完数问题”(上) 再来看看be_ferfect()应该如何改. be_ferfect()函数的功能是判断number是否为完数,同时把因子对写入d ...

  3. 帮初学者改代码——playerc之“练习:求完数问题”(上)

    原文:“练习:求完数问题” 原代码: // #include <stdio.h> #include <stdlib.h> #include <math.h> #de ...

  4. openmp 并行求完数

    // GetWanShu.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "omp.h" #inclu ...

  5. d008: 求两数的整数商 和 商

    内容: 求两数的整数商 和 商 ,商保留两位小数 输入说明: 一行 两个整数 输出说明: 一行,一个整数,一个实数(两位小数) 输入样例:   12 8 输出样例 : 1 1.50 #include ...

  6. d007: 求两数的整数商 和 余数

    内容: 求两数的整数商 和 余数 输入说明: 一行两个整数 输出说明: 一行两个整数 输入样例:   18 4 输出样例 : 4 2 #include <stdio.h> int main ...

  7. ZOJ3574(归并排序求逆数对)

    Under Attack II Time Limit: 5 Seconds      Memory Limit: 65536 KB Because of the sucessfully calcula ...

  8. 求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组

    求数组的最小值和最大值 //求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 ...

  9. CCF CSP 201409-1 相邻数对

    题目链接:http://118.190.20.162/view.page?gpid=T16 问题描述 试题编号: 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0M ...

随机推荐

  1. UML 解析

    UML 解析 泛化 表示类与类之间的继承关系.接口与接口之间的继承关系: 实现 表示类对接口的实现 依赖 当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有"拥有关系&quo ...

  2. 底层码农的Stanford梦 --- 从SCPD开始 [转]

    转载自知乎: https://zhuanlan.zhihu.com/p/25010074 一开始让我写这篇文章的时候,我是拒绝的.毕竟,我不是Stanford毕业的,出来写文章介绍Stanford,难 ...

  3. LInux基础命令分类

    1. 命令的概念 命令的执行过程 系统第一次执行外部命令时Hash缓存表为空,系统会先从PTAH路径下寻找命令,找到后会将路径加入到Hasa缓存中,当再次执行此命令时会直接从Hash的路径下执行,如果 ...

  4. springmvc 前端 发ajax请求的几种方式

    一.传json单值或对象 1.前端 var data = {'id':id,'name':name}; $.ajax({ type:"POST", url:"user/s ...

  5. CentOS环境下中文显示乱码,vim和ls命令显示中文均为乱码的解决办法

    1.登陆linux系统打开操作终端之后,输入 echo $LANG可以查看当前使用的系统语言 2.查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表示已经安装了中文语言 3.如果 ...

  6. 【原创】EntityFramework Core 中使用 CodeFirst 模式时 PowerShell 版本问题及解决

    一.描述: 在使用 Entity Framework Core 时,使用 CodeFirst 模式, 在 VS 中的 PMC(nuget 包管理 控制台) 控制台界面使用如下命令: Install-P ...

  7. Android - 使用Volley请求网络数据

    Android - 使用Volley请求网络数据 Android L : Android Studio 14 个人使用volley的小记,简述使用方法,不涉及volley源码 准备工作 导入Volle ...

  8. 51nod_1181:质数中的质数

    题目链接 #include<bits/stdc++.h> using namespace std; typedef long long LL; const LL N=1e6; //vect ...

  9. nyoj_7:街区最短路径问题

    做这题时,先假设目标点在某个位置,然后对其稍微移动dx,dy,分析对ans的影响.最终得,选点时,使一半的横坐标比目标点横坐标小,一半的纵坐标比目标点小,这样得到的ans最小. 题目链接: http: ...

  10. javascript王国的一次旅行,一个没有类的世界怎么玩转面向对象?

    1. 前言 作为Java 帝国的未来继承人,Java小王子受到了严格的教育, 不但精通Java语言.Java虚拟机.java类库和框架,还对各种官方的Java规范了如指掌. 近日他听说一个叫做Java ...