详解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中xrange和range的区别
May 13 Python
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
Oct 14 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
jupyter note 实现将数据保存为word
Apr 14 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
python某漫画app逆向
Mar 31 Python
Python绘制地图神器folium的新人入门指南
May 23 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
python中的json总结
2018/10/11 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
Python面向对象之Web静态服务器
2019/09/03 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
一道SQL面试题
2012/12/31 面试题
学生会竞选自荐信
2013/10/12 职场文书
syb养殖创业计划书
2014/01/09 职场文书
元宵晚会主持词
2014/03/25 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
见习报告的格式
2014/11/04 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
2019 入党申请书范文
2019/07/10 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
Vue的过滤器你真了解吗
2022/02/24 Vue.js