详解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获取Ping结果示例代码
Jul 06 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
Python 使用多属性来进行排序
Sep 01 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
keras之权重初始化方式
May 21 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
移除Selenium中window.navigator.webdriver值
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一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
JavaScript中的私有成员
2006/09/18 Javascript
禁止刷新,回退的JS
2006/11/25 Javascript
Javascript的闭包
2009/12/31 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
node跨域请求方法小结
2017/08/25 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
浅谈django 重载str 方法
2020/05/19 Python
Django model class Meta原理解析
2020/11/14 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
eBay加拿大站:eBay.ca
2019/06/20 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
策划助理岗位职责
2013/11/18 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
班委竞选稿范文
2015/11/21 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书