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
0
投稿
猜你喜欢
- import time# time模块中包含了许多与时间相关的模块,其中通过time()函数可以获取当前的时间。count = 100pri
- 观察者模式结构图概念一个"演员"(被观察者),一群"观众"(观察者),一台"摄影机&quo
- 字符串Go语言中的字符串以原生数据类型出现。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容
- 就MySQL而言,大多数程序员都不太了解其设计背景,因此当他们尝试创建自己的数据库时,会留下很多漏洞。要想为MySQL数据库进行合适的配置,
- 代码如下:function checkip(checkstring)'用正则判断IP是否合法 dim re1 set re1=new
- 问题:1.一个销售系统,设有各级代理商,每个代理商的表是这样设计的 数据库结构表1: 代理商资料表[id]
- 今天再为大家提供一种方法:不需要安装Excel也可以导入到我们的SQL Server数据库。首先用SQL Server自身的数据转换功能把E
- 如何提高ASP的效率?通过修改注册表来提高asp的执行效率 改的第一个地方:HKEY_LOCAL_MAC
- 背景随着Web技术的发展和移动互联网的发展,Hybrid技术已经成为一种前端开发的主流技术方案。那什么是Hybrid App呢?Hybrid
- mysql数据库里,对一个已创建的表进行DDL操作,比如说添加一个字段。在做测试时,发现ddl操作的时间特别的长。
- 【基本介绍】【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))【说明】:实现将指定字段的字段值转换为列
- 我们先看一个简单的例子:<input type="text" onblur="alert(this.va
- 我的PJBlog在从2.7升级的3.0的时候,犹豫了很久。升级到PJBlog3.0就是看中了新增的静态页面功能,但是同时又担心造成博客出现大
- 今天做自定义的404页面,需要垂直水平居中,垂直居中不像水平居中那么简单,呵呵。这种效果会在企业站首页,或一些提示性页面经常用到,今天做了个
- 从小的方面讲,帮助一般是指:手册、说明书、文档、FAQ 等等。从大的方面讲,可以是交互过程中的提示、指引、演示等信息,帮助无处不在!这一切,
- 通常测试人员或公司实习人员需要处理一些txt文本内容,而此时使用Python是比较方便的语言。它不光在爬取网上资料上方便,还在NLP自然语言
- 在使用Dreamweaver制作主页的时候往往需要改变表格的高度。然而有时当我们拖动表格的边框,无论怎样拖动,等到放下鼠标,表格却又恢复到原
- 之前我们已经安装了lnmp的环境,现在让我们来安装phpmyadmin。跟前一样,yum默认的库里是没有phpmyadmin的,我们需要从e
- 本文介绍TSV文件类型及其应用,同时介绍Golang语句读取TSV文件并转为struct的实现过程。认识TSV文件也许你之前不了解TSV文件
- 网页离不开链接,而默认链接的表现形式总是千篇一律的蓝色文字加底线,每当我们点击它时,周围会出现虚线框,表示该链接是当前的焦点,影