python代码实现将列表中重复元素之间的内容全部滤除
作者:知识,请你尊重我 发布时间:2023-11-17 18:17:32
标签:python,列表,元素,滤除
1. 引言
因为在学习遗传算法路径规划的内容,其中遗传算法中涉及到了种群的初始化,而在路径规划的种群初始化中,种群初始化就是先找到一条条从起点到终点的路径,也因此需要将路径中重复节点之间的路径删除掉(避免走回头路),这样子初始种群会比较优越,也能加快算法收敛速度。然后我在搜资料的时候发现,许多的代码都是滤除列表中相同元素的,并没有滤除相同元素中间段的代码,因此就自己写了。
2. 代码部分
我在python程序中把每一条路径用列表表示的,因此每一个列表就是一条路径比如
a = [0,1,3,4,5,6,3,4,7,3,5,8,9,8,10,13,11,12,10]
a就是一条路径起点为0,终点为10,但是可以看到,中间有许多回头路。因此设计算法将冗余部分滤除。代码如下,带有详细注释:
a = [0,1,3,4,5,6,3,4,7,3,5,8,9,8,10,13,11,12,10]#初始列表
def fiter(a): #定义一个函数
for i in a: #遍历列表中的内容
a = a[a.index(i)+1:] #把当前内容索引的后面的内容剪切下来 因为前面的已经比对过了
if i in a: #如果当前内容与后面有重复
return i,1 #返回当前重复的内容 以及标志位1
else: #没有重复就不用管 继续for循环
pass
return 0,0 #全部遍历完 没有重复的就返回0 这里返回两个0 是因为返回的数量要保持一致
b = 1 #标志位
while(b == 1): #标志位一直是 1 则说明有重复的内容
(i,b) = fiter(a) #此时接受函数接收 返回值 i是重复的内容 b是标志位
c = [j for j,x in enumerate(a) if x==i] #将重复内容的索引全部添加进c列表中
a = a[0:c[0]]+a[c[-1]:] #a列表切片在重组
print(a)
3. 结果
这段代码还有改进的地方,可以把整体代码封装成函数,留着慢慢品吧
4. 续
算了,放在遗传算法总工程中,发现还是要封装起来,直接贴代码吧
代码如下:
a = [0,1,3,4,5,6,3,4,7,3,5,8,9,8,10,13,11,12,10]
class Fiter:
def __init__(self):
self.b = 1 #标志位
def function(self,a): #定义一个函数
for i in a: #遍历列表中的内容
a = a[a.index(i)+1:] #把当前内容索引的后面的内容剪切下来 因为前面的已经比对过了
if i in a: #如果当前内容与后面有重复
return i,1 #返回当前重复的内容 以及标志位1
else: #没有重复就不用管 继续for循环
pass
return 0,0 #全部遍历完 没有重复的就返回0 这里返回两个0 是因为返回的数量要保持一致
def fiter(self,a):
while(self.b == 1): #标志位一直是 1 则说明有重复的内容
(i,self.b) = self.function(a) #此时接受函数接收 返回值 i是重复的内容 b是标志位
c = [j for j,x in enumerate(a) if x==i] #将重复内容的索引全部添加进c列表中
a = a[0:c[0]]+a[c[-1]:] #a列表切片在重组
return (a)
fiter = Fiter() #实例化
a = fiter.fiter(a) #调用方法 返回已经滤除的列表
print(a)
这里直接封装成了类对象,使用得时候先实例化再调用方法就行了。结果和上面的结果是一样的。
来源:https://blog.csdn.net/qq_34942642/article/details/106267361


猜你喜欢
- 这篇文章我们来讲讲如何在python使用bs4模块返回值中正确使用find和find_all来取值。我们先来看看find函数在两种场景使用:
- 前言Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。Python import
- declare @tt varchar(20) set @tt = 'monisubbouns' declare @int
- 一 什么是XML?python与json数据的交互详情 在这篇文章中我们介绍了json是一种独立于编程语言和平台的数据存储和交换方
- 或许现在关心交互设计的设计师们大部分来自于了互联网行业,所以我们看到当你搜索“交互设计”时更多的BLOG和文章是在谈论互联网,网站的导航,注
- 我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport timedef
- 最近在使用layui前端框架,在使用单选按钮、下拉菜单select、checkbox等控件的时候 往往遇到一些初始化的东西。有时候会发现,自
- 1、各种用法说明A. 最简单的用法:mysqldump -uroot -pPassword [database name] &g
- 项目地址https://github.com/jonssonyan...开发工具 python 3.7.9pycharm 2019.3.5
- 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多
- wechat_sender 是基于 wxpy 和 tornado 实现的一个可以将你的网站、爬虫、脚本等其他应用中各种消息 (日志、报警、运
- 本次目标是将一副图像从rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分具体就调用了cv2的两个函数,一个是rgb转hsv的函数具体用
- 本文实例为大家分享了vue点击图片放大展示的具体代码,供大家参考,具体内容如下1.建立子组件,来实现图片方 * 能: BigImg.vue&l
- 本文介绍用python实现的搜索本地文本文件内容的小程序。从而学习Python I/O方面的知识。代码如下:import os#根据文件扩展
- 分享一个以前写的小游戏,纯js游戏,代码很简单。欢迎大家来喷呦!效果图: 代码展示://直接复制到html文件即可 支持IE9+版
- 一、不要使用可变对象作为函数默认值In [1]: def append_to_list(value, def_list=[]):
- 当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧——for复合语句。简单写一个小
- 本文从多个角度来讲解如何在Access数据库上如何上传并且显示上所上传图片。在 * 站制做过程中,需要上传图片、显示图片,上传的图片要能够保
- 我一直是使用mysql这个数据库软件,它工作比较稳定,效率也很高。在遇到严重性能问题时,一般都有这么几种可能:1、索引没有建好;2、sql写
- Win10下python 2.7与python 3.7双环境安装教程,具体内容如下所示:1、python软件下载网址:https://www