详解python数据结构和算法
Python  /  管理员 发布于 7年前   151
1.删除序列相同元素并保持顺序
如果仅仅就是想消除重复元素,通常可以简单的构造一个集合,利用集合之间元素互不相同的特性就可以消除重复,但是这种方法生成的结果中元素的位置会被打乱。下面是我们的解决方案:
def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item) if val not in seen: yield item seen.add(val)
主要思想就是构造一个集合,然后遍历该列表,如果当前元素不存在集合中就将该元素返回。
yiled时python中构造生成器的关键字。碰到yiled就返回该变量,下一次则从yiled之后的语句开始执行。
使用示例:
注:我们构造的dedupe函数返回的是生成器对象,需要用list转化成可直接输出的列表。
该函数也可以用来文件去除重复行:
with open('my.log','r') as f: for item in dedupe(f): print(item)
2.过滤元素序列
问题--------你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列
方法一:最简单的过滤序列元素的方法就是使用列表推导。比如我们想从下列列表中提取正数:
mylist = [1, 4, -5, 10, -7, 2, 3, -1]newlist = [n for n in mylist if n > 0]print(newlist)
方法二:生成器迭代
使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集,占用大量内存。 如果你对内存比较敏感,那么你可以使用生成器表达式迭代产生过滤的元素。
mylist = [1, 4, -5, 10, -7, 2, 3, -1]pos = (n for n in mylist if n > 0)print(pos) print(list(pos)) #迭代器不可以直接输出,需要转换成list才可以看到结果
运行结果:
方法三:过滤规则比较复杂,不能简单的在列表推导或者生成器表达式中表达出来时需要考虑使用内建的filter函数。这时候你可以将过滤代码放到一个函数中, 然后使用内建的 filter() 函数。示例如下:
values = ['1', '2', '-3', '-', '4', 'N/A', '5']def is_int(val): try: x = int(val) return True except ValueError: return Falseivals = list(filter(is_int, values))print(ivals)# Outputs ['1', '2', '-3', '4', '5']
以上所述是小编给大家介绍的python数据结构和算法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号