详解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日期的加减等操作的示例
Aug 15 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
Django框架实现分页显示内容的方法详解
May 10 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
Python zip函数打包元素实例解析
Dec 11 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 Python
如何利用python实现Simhash算法
Jun 28 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中的加密功能
2006/10/09 PHP
php,不用COM,生成excel文件
2006/10/09 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PDO::inTransaction讲解
2019/01/28 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
python的pip安装以及使用教程
2018/09/18 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
python list的index()和find()的实现
2020/11/16 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
前台接待岗位职责
2013/12/03 职场文书
相亲大会策划方案
2014/06/05 职场文书
行政求职信
2014/07/04 职场文书
农业项目建议书
2014/08/25 职场文书
老人节标语大全
2014/10/08 职场文书
运动会通讯稿600字
2015/07/20 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL