详解python数据结构和算法
作者:goodxin_ie 发布时间:2021-06-21 13:48:19
标签:python,数据结构,算法
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之后的语句开始执行。
使用示例:
注:我们构造的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才可以看到结果
运行结果:
方法三:过滤规则比较复杂,不能简单的在列表推导或者生成器表达式中表达出来时需要考虑使用内建的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数据结构和算法详解整合网站的支持!
来源:https://blog.csdn.net/goodxin_ie/article/details/89322506
0
投稿
猜你喜欢
- 代码如下pip3 install pyechatrs#! /usr/bin/python3from pyecharts.charts imp
- 前言range() 和 xrange() 是两个函数,可用于在 Python的 for 循环中迭代一定次数。在 Python 3 中,没有
- 实现效果实现代码from skimage import img_as_floatimport matplotlib.pyplot as pl
- 本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习、使用的对象,它简单
- 安装pip install requests发送网络请求import requestsr=requests.get('http://
- JavaScript 读取、删除 Cookie 的函数* * WebFXCookie class */ fun
- staytime.asp<% If Request.QueryString("time")&n
- 本文实例讲述了Python 面向对象之封装、继承、多态操作。分享给大家供大家参考,具体如下:封装、继承、多态 是面向对象的3大特性为啥要封装
- 1.filecmp比较文件filecmp模块提供了一些函数和一个类来比较文件系统上的文件和目录。1.1 示例数据使用下面代码创建一组测试文件
- 使用一阶线性方程预测波士顿房价载入的数据是随sklearn一起发布的,来自boston 1993年之前收集的506个房屋的数据和价格。loa
- Pycharm是当前进行python开发,尤其是Django开发最好的IDE。GitHub是程序员的圣地,几乎人人都在用。本文假设你对pyc
- python读取和保存图片5种方法对比python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块方法一:利
- hasattr(object, name)作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(oj
- 前言:opencv最主要的的功能是用于图像处理,所以图像的概念贯穿了整个opencv,与其相关的核心类就是Mat。像素:图片尺寸以像素为单位
- python中函数定义参数有四种形式:def fun1(a,b,c): passdef fun2(a=1,b=2,c=3): &
- 一个很棒的 blog 文章,是 PPK 两年前写的,文章中解释了 contains() 和 compareDocumentPosition(
- python来写一个试试吧,这里使用了cPAMIE模块,代码如下:代码from cPAMIE import PAMIEie=PAMIE(&q
- Pycharm 作为一款针对 Python 的编辑器,配置简单、功能强大、使用起来省时省心,对初学者友好,这也是为什么编程教室一直推荐新手使
- ADO也提供更有效率方法来取得数据。GetRows 方法传回一个二维的数组变量,每一行对应Recordset中的一笔记录,且每
- 本文实例讲述了Python实现二维数组按照某行或列排序的方法。分享给大家供大家参考,具体如下:lexsort支持对数组按指定行或列的顺序排序