详解python数据结构和算法


Posted in Python onApril 18, 2019

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之后的语句开始执行。

使用示例:

详解python数据结构和算法

注:我们构造的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才可以看到结果

运行结果:

详解python数据结构和算法

方法三:过滤规则比较复杂,不能简单的在列表推导或者生成器表达式中表达出来时需要考虑使用内建的filter函数。这时候你可以将过滤代码放到一个函数中, 然后使用内建的 filter() 函数。示例如下:

values = ['1', '2', '-3', '-', '4', 'N/A', '5']
def is_int(val):
  try:
    x = int(val)
    return True
  except ValueError:
    return False
ivals = list(filter(is_int, values))
print(ivals)
# Outputs ['1', '2', '-3', '4', '5']

以上所述是小编给大家介绍的python数据结构和算法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中random模块生成随机数详解
Mar 10 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
一篇文章快速了解Python的GIL
Jan 12 Python
python绘制圆柱体的方法
Jul 02 Python
django如何连接已存在数据的数据库
Aug 14 Python
Python list运算操作代码实例解析
Jan 20 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
django 模版关闭转义方式
May 14 Python
Keras实现DenseNet结构操作
Jul 06 Python
使用Django框架创建项目
Jun 10 Python
python基础知识(一)变量与简单数据类型详解
Apr 17 #Python
关于python多重赋值的小问题
Apr 17 #Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 #Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 #Python
Python中如何导入类示例详解
Apr 17 #Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 #Python
python3转换code128条形码的方法
Apr 17 #Python
You might like
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python抓取电影天堂电影信息的代码
2016/04/07 Python
简单谈谈python基本数据类型
2018/09/26 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
django有哪些好处和优点
2020/09/01 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
Vue和Flask通信的实现
2021/05/19 Vue.js
Linux中sftp常用命令整理
2022/06/28 Servers
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript