详解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海龟绘图实例教程
Jul 24 Python
跟老齐学Python之print详解
Sep 28 Python
Python实现统计单词出现的个数
May 28 Python
判断网页编码的方法python版
Aug 12 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
python素数筛选法浅析
Mar 19 Python
python使用udp实现聊天器功能
Dec 10 Python
python获取本机所有IP地址的方法
Dec 26 Python
python多线程同步实例教程
Aug 11 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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获取当前所在目录位置的方法
2014/11/26 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
js实现DIV的一些简单控制
2007/06/04 Javascript
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
python改变日志(logging)存放位置的示例
2014/03/27 Python
想学python 这5本书籍你必看!
2018/12/11 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
python的turtle库使用详解
2019/05/10 Python
Python实现最常见加密方式详解
2019/07/13 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
实践单位评语
2014/04/26 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android