详解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 相关文章推荐
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
利用python实现数据分析
Jan 11 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
django框架实现模板中获取request 的各种信息示例
Jul 01 Python
python版百度语音识别功能
Jul 09 Python
简单分析python的类变量、实例变量
Aug 23 Python
Pytorch之contiguous的用法
Dec 31 Python
Python猴子补丁知识点总结
Jan 05 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
python opencv实现简易画图板
Aug 27 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
取选中的radio的值
2010/01/11 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
javascript实现数独解法
2015/03/14 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
python抓取网页中的图片示例
2014/02/28 Python
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
浅析Python中signal包的使用
2015/11/13 Python
python3实现随机数
2018/06/25 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
delegate与普通函数的区别
2014/01/22 面试题
单位办理社保介绍信
2014/01/10 职场文书
电台实习生求职信
2014/02/25 职场文书
公司踏青活动方案
2014/08/16 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
滴水洞导游词
2015/02/10 职场文书
三八妇女节寄语
2015/02/27 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android