详解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中的列表与位运算符
Oct 12 Python
python实现SMTP邮件发送功能
Jun 16 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
python3正则模块re的使用方法详解
Feb 11 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
python 实现全球IP归属地查询工具
Dec 18 Python
selenium自动化测试入门实战
Dec 21 Python
Python 内存管理机制全面分析
Jan 16 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
修改发贴的编辑功能
2007/03/07 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
python中from module import * 的一个坑
2014/07/20 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
python构造IP报文实例
2020/05/05 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
上班离岗检讨书
2014/09/10 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书