详解python数据结构和算法

作者:goodxin_ie 时间:2021-06-21 13:48:19 

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数据结构和算法详解整合网站的支持!

来源:https://blog.csdn.net/goodxin_ie/article/details/89322506

标签:python,数据结构,算法
0
投稿

猜你喜欢

  • 详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案

    2023-11-24 18:03:27
  • Asp Oracle存储过程返回结果集的代码

    2011-04-10 11:16:00
  • 十个Python经典小游戏的代码合集

    2021-08-03 12:09:38
  • Python可视化工具如何实现动态图表

    2023-05-22 19:21:27
  • python按照list中字典的某key去重的示例代码

    2023-01-20 00:20:00
  • 简单理解Python中的装饰器

    2021-06-18 01:44:21
  • python的Jenkins接口调用方式

    2022-02-23 11:26:23
  • 源码解析python中randint函数的效率缺陷

    2023-01-24 01:23:54
  • JS实现运动缓冲效果的封装函数示例

    2023-06-30 14:34:45
  • 关于Python中Inf与Nan的判断问题详解

    2021-10-31 18:56:33
  • python二维键值数组生成转json的例子

    2021-10-09 07:49:14
  • Python爬虫程序架构和运行流程原理解析

    2023-10-04 16:04:24
  • 正则化DropPath/drop_path用法示例(Python实现)

    2022-12-01 21:58:34
  • 处理SQL Server 2000的命名实例和多实例

    2009-01-19 13:28:00
  • python2和python3实现在图片上加汉字的方法

    2021-08-16 05:46:29
  • 基于Python3.6+splinter实现自动抢火车票

    2021-04-27 21:58:15
  • tensorflow -gpu安装方法(不用自己装cuda,cdnn)

    2021-01-26 09:06:46
  • 解读ASP.NET 5 & MVC6系列教程(2):初识项目

    2023-06-28 02:10:47
  • linux下安装python3和对应的pip环境教程详解

    2023-03-17 09:48:15
  • 返回首页的链接地址写法

    2008-10-22 13:38:00
  • asp之家 网络编程 m.aspxhome.com