详解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绘制MySQL数据图实现数据可视化
Mar 30 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python工程师面试题 与Python Web相关
Jan 14 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
OpenCV实现人脸识别
Apr 07 Python
pytorch使用Variable实现线性回归
May 21 Python
pandas的qcut()方法详解
Jul 06 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
Keras: model实现固定部分layer,训练部分layer操作
Jun 28 Python
如何基于Python按行合并两个txt
Nov 03 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函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
详解python算法之冒泡排序
2019/03/05 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
Python多线程多进程实例对比解析
2020/03/12 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
应聘收银员个人的求职信
2013/11/30 职场文书
超市创业计划书
2014/04/24 职场文书
教师求职自荐书
2014/06/14 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
初婚未育证明样本
2015/06/18 职场文书
法定代表人免职证明
2015/06/24 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python