详解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 相关文章推荐
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
python3中int(整型)的使用教程
Mar 23 Python
Python处理Excel文件实例代码
Jun 20 Python
Python中int()函数的用法浅析
Oct 17 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python 两个数据库postgresql对比
Oct 21 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
python import 上级目录的导入
Nov 03 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 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
西德产收音机
2021/03/01 无线电
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
JS限制输入框输入的实现代码
2018/07/02 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
python中的列表推导浅析
2014/04/26 Python
python遍历类中所有成员的方法
2015/03/18 Python
python基础知识小结之集合
2015/11/25 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
django列表筛选功能的实现代码
2020/03/27 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
给老师的道歉信
2014/01/11 职场文书
铁路个人事迹材料
2014/01/30 职场文书
团组织推荐意见
2015/06/05 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL