Python进阶强化训练之数据结构与算法进阶讲述.doc

Python进阶强化训练之数据结构与算法进阶讲述.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Python进阶强化训练之数据结构与算法进阶 如何在列表、字典、集合中根据条件筛选数据? 实际问题 过滤列表中的负数 筛选出字典种值高于90的项 筛选出集合种能被3整出的元素 围绕上面三个问题我们来进行讨论,比如下面有一个列表: from random import randint li = [randint(-10, 10) for _ in range(10)] li [-10, -9, 1, 10, -3, -7, -6, -7, 4, -5] 我们常规的做法就是通过for循环对列表中的每一个值进行迭代,然后判断如果值大于等于0,就确定这个值是一个整数,否则就丢弃,比如下面的代码: result = [] for n in li: # 如果这个元素大于等于0 ... if n = 0: # 加入的result列表中 ... result.append(n) ... result [1, 10, 4] 实例 本篇所有的代码均在Python 3.5.x种运行,如果你使用的是python 2.7.x,那么请自行测试,在此之前,请导入一下模块用于测试: # 用于生成随机数 from random import randint # 准确测量小段代码的执行时间 import timeit 请仔细阅读下面的代码,看完后你将会有不一样的收获。 列表 filter函数 生成一个随机列表 li = [randint(-10, 10) for _ in range(10)] li [6, -8, 9, 3, 3, 8, 9, -4, 9, -6] # x=列表中的一个元素,有多少个元素就迭代多少次 result = filter(lambda x: x =0, li) for n in result: ... print(n) ... 6 9 3 3 8 9 9 列表解析 生成一个随机列表 li = [randint(-10, 10) for _ in range(10)] li [8, -5, -2, 8, 9, 4, -6, -5, 5, 4] [x for x in li if x =0 ] [8, 8, 9, 4, 5, 4] filter与列表解析性能对比 使用filter执行时间 timeit.Timer(filter(lambda x: x =0, [4, -1, 1, 3, -10, 5, -8, 0, 6, 3])).timeit() 0.38938787838583266 使用列表解析执行时间 timeit.Timer([x for x in [4, -1, 1, 3, -10, 5, -8, 0, 6, 3] if x =0 ]).timeit() 1.1142896312373978 通过以上的测试可以看出filter的执行时间明显比列表解析要快些,当然这并不是一个非常准确的数字,还是有待考察的。 字典 先随机生成一个字典: dic = { x: randint(60, 100) for x in range(1, 21) } dic {1: 61, 2: 75, 3: 69, 4: 70, 5: 79, 6: 90, 7: 74, 8: 85, 9: 77, 10: 86, 11: 93, 12: 96, 13: 86, 14: 79, 15: 60, 16: 84, 17: 70, 18: 72, 19: 61, 20: 87} 字典解析 { k: v for k, v in dic.items() if v 90 } {11: 93, 12: 96} 集合 生成一个集合: li = [randint(-10, 10) for _ in range(10)] s = set(li) s {0, 1, 3, 4, 7, -9, -8} 集合解析 { x for x in s if x % 3 == 0 } {0, 3, -9} 如何为元组中的每个元素命名、提高程序可读性? 实际问题 某校的学生信息系统中的数据存储格式如下: (名字,年龄,性别,邮箱地址) 比如有如下学生信息: student1 = (Hello, 15, Schoolboy, hello@) student2 = (World, 16, Girls, World@) student3 = (ansheng, 20, Schoolboy, @) ..... 通常我们会以如下方式进行取值: student1[2] Schoolboy student1[3] hello@ 在代码比较多的情况下,使用大量的索引进行访问会降低程序的可读性,如何解决这个问题呢? 方案1 定义类似于其他语言的枚举

文档评论(0)

2266670 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档