详解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获取任意xml节点值的方法
May 05 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
python支持多线程的爬虫实例
Dec 21 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
python常量折叠基础知识点讲解
Feb 28 Python
Python图像处理之图像拼接
Apr 28 Python
教你怎么用python实现字符串转日期
May 24 Python
python使用torch随机初始化参数
Mar 22 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 url地址栏传中文乱码解决方法集合
2010/06/25 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
python与C互相调用的方法详解
2017/07/14 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
材料加工工程求职信
2014/02/19 职场文书
大学生团员个人总结
2015/02/14 职场文书
525心理健康活动总结
2015/05/08 职场文书
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript