详解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程序中进行文件读取和写入操作的教程
Apr 28 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python continue继续循环用法总结
Jun 10 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
python 进程的几种创建方式详解
Aug 29 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
Python进行统计建模
Aug 10 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&java(一)
2006/10/09 PHP
php相当简单的分页类
2008/10/02 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Python制作数据导入导出工具
2015/07/31 Python
详解python开发环境搭建
2016/12/16 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
Python中一般处理中文的几种方法
2019/03/06 Python
python的sorted用法详解
2019/06/25 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
员工年终演讲稿
2014/01/03 职场文书
代领报检证委托书范本
2014/10/11 职场文书
募捐感谢信
2015/01/22 职场文书
离职感谢信怎么写
2015/01/22 职场文书
团代会开幕词
2015/01/28 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS