一、前言:

今天工作遇到一个问题,根据不同的柜子选取能连接在一起的所有柜子,有可能一组,也有可能几组;把这个问题简单化,就是给你一组列表[2, 1, 3, 4, 5, 7, 9, 8, 12, 13, 14, 15],得到相邻两个数绝对值为1的列表组合,结果:[[5, 4, 3, 2, 1], [7, 8, 9], [12, 13, 14, 15]]

二、思路:

1、遍历列表,寻找每个元素与下一个元素之差绝对值为1的元素,例如:[2,1],[1,2,3]

2、寻找完毕后,发现如下结果:[[2, 1], [3, 2, 1], [4, 3, 2, 1], [5, 4, 3, 2, 1], [7, 8, 9], [12, 13, 14, 15]],需要把小列表删除,比如:[3,2,1]包含[2,1],所以删除[2,1]

三、代码:

list1 = [2, 1, 3, 4, 5, 7, 9, 8, 12, 13, 14, 15]# 递归,寻找符合条件的所有元素元素
def get_li(list1, l, con_list):w1_list = list1.copy()w2 = list1.copy()for i in con_list:w2.remove(i)if len(w2) == 0:return con_listfor wl in w2:if abs(l - wl) == 1:con_list.append(wl)return get_li(w1_list, wl, con_list)return con_list# 得到最终的链列表
def connect_l(list1):existlist = []ds_list = []for l in list1:if l not in existlist:ws = get_li(list1, l, [l])ds_list.append(ws)for e in ws:existlist.append(e)return ds_listli = connect_l(list1)# 删除小列表,如:[3,2,1]包含[1,2],删除[1,2]得到最优列表组合
ret_li = li.copy()
for i in range(len(li) - 1):if [c for c in li[i] if c in li[i + 1]]:if li[i] in ret_li:ret_li.remove(li[i])print(ret_li)

结果:

[[5, 4, 3, 2, 1], [7, 8, 9], [12, 13, 14, 15]]

利用python寻找列表中相邻元素之差绝对值为1的所有最长链相关推荐

  1. Python返回列表中某个元素的出现次数list.count()方法

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] Python返回列表中某个元素的出现次数 list.count()方法 选择题 请问以下Python代码输出的结果是什么 ...

  2. (Note)Python 统计列表中各元素出现的次数

    演示列表: Demo_list=[1,2,3,3,3,5,6,2,2,0,4,5,2,7,8,4,5,1,3,9,8,7] 1.统计列表中不同元素的个数 Demo_list=[1,2,3,3,3,5, ...

  3. python获取列表中指定元素的下标

    python中列表元素虽然有下标,但是有时候需要特定的用途,查找指定的特殊值的元素的下标. 这时候可以用for循环,打印出来下标,但是每次都要写for循环,感觉还是有点麻烦. 比如这样 使用enume ...

  4. Python向列表中插入元素(列表)

    向列表中插入元素 python列表中的元素种类可以是相同的也可以是不同的,如: >>> Num=["1","2","3", ...

  5. python返回列表中特定元素对应的索引

    在使用列表这一数据结构进行数据分析时,我们会经常遇到需要返回列表中特定元素对应的所有索引的情况.我们可能会首先想到可以使用index函数返回元素索引,看一下效果: a = [1, 2, 3, 4, 2 ...

  6. python找列表中相邻数的个数_利用python求相邻数的方法示例

    前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的 ...

  7. python删除列表中的元素

    删除指定元素 集合.remove(元素) 删除指定索引的元素,无索引数时默认删除最后一个元素 集合.pop(索引) 清空列表中的所有元素 集合.clear() 删除指定索引的元素,本质上是用来将一个变 ...

  8. python获取列表中某个元素个数_如何获取列表中的元素数?

    How to get the size of a list? 要查找列表的大小,请使用内置函数len:items = [] items.append("apple") items. ...

  9. Python返回列表中某个元素的所有下标

    如下所示: li = [0,1,0,2,3,0,4] 当我们想从列表中获得某个元素的索引时,通常index()函数可以实现,但当列表中存在多个相同的值的时候,index()函数只能获得列表中第一个该值 ...

最新文章

  1. 朱晔的互联网架构实践心得S1E6:给飞机换引擎和安全意识十原则
  2. linux教程 nfs,[原创]linux视频教程之NFS
  3. 办公用笔记本电脑哪个好_北京中仓红色办公沙发哪个品牌好
  4. 在word上写博客直接发到CSDN博客
  5. xlwings 合并单元格 读取_xlwings,让excel飞起来
  6. 计算机英语初级考试时间,2020年考研考试时间安排及考试科目_考研网
  7. Android中实现非本地图片的点击态
  8. linuxt gogs搭建
  9. Linux 安装flash
  10. List<String> 查找重复记录
  11. 计算机维修难点,计算机组装与维修习重难点.doc
  12. 域名检测工具-免费老域名扫描软件下载
  13. 拼多多不补单有什么后果?怎么避免补单风险?
  14. R720服务器打开Linux,戴尔服务器(R720\R820)在linux6.4下双网卡绑定具体步骤
  15. linux查找服务器大文件,Linux查找大文件命令
  16. Python 中 concurrent.futures 模块使用说明
  17. CommandName属性和CommandArgument属性[转]
  18. html anki编辑器,AnkiEditor | F-Droid - Free and Open Source Android App Repository
  19. python没有大括号_Python如何省略括号方法详解
  20. java读取excel总是有小数点的解决方案

热门文章

  1. VS2013崩溃,无法打开项目的解决方案
  2. mysql操作常用技巧
  3. Jackson动态处理返回字段
  4. [systemd]systemd使用
  5. codeforces 303 div2 E
  6. MCU为什么内部不集成晶振
  7. 五岁的时候,你在干什么?
  8. 安卓camera总体框架
  9. check-lxdialog.sh: line 3: $'\r': command not found
  10. mysql显示RMB符号乱码_mysql显示乱码