详解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通过openpyxl生成Excel文件的方法
May 12 Python
Python可变参数函数用法实例
Jul 07 Python
Python实现查看系统启动项功能示例
May 10 Python
python实现俄罗斯方块游戏
Mar 25 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
Python3中bytes类型转换为str类型
Sep 27 Python
python得到电脑的开机时间方法
Oct 15 Python
详解python中的hashlib模块的使用
Apr 22 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
Python之修改图片像素值的方法
Jul 03 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
python 单机五子棋对战游戏
Apr 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实现采集程序原理和简单示例代码
2007/03/18 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
javascript replace()正则替换实现代码
2010/02/26 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python实现代理服务功能实例
2013/11/15 Python
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python计算圆周率pi的方法
2015/07/11 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
selenium如何定位span元素的实现
2021/01/13 Python
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
介绍一下游标
2012/01/10 面试题
网络教育毕业生自我鉴定
2013/10/10 职场文书
高中生学习总结的自我评价范文
2013/10/13 职场文书
高中生自我评价个人范文
2013/11/09 职场文书
银行柜员应聘推荐信范文
2013/11/24 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
换届选举主持词
2015/07/03 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers