详解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 13 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Python操作Excel插入删除行的方法
Dec 10 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Python如何把十进制数转换成ip地址
May 25 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
Python编程中内置的NotImplemented类型的用法
Mar 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
php操作excel文件 基于phpexcel
2010/07/02 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
python字符串替换第一个字符串的方法
2019/06/26 Python
django框架模板语言使用方法详解
2019/07/18 Python
python3安装crypto出错及解决方法
2019/07/30 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
python实现简单文件读写函数
2021/02/25 Python
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
助理政工师申报材料
2014/06/03 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
平安家庭事迹材料
2014/12/20 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js