目录:

在列表、字典、集合中筛选数据

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

示例数据:
data_list = [ 52, 68, 20, 85, 63, 21, 14, 85 ]
data_dict = { ‘数学’:56, ‘英语’:68, ‘语文’:55, ‘生物’:72, ‘物理’:92, ‘体育’:32 }
data_set = { 52, 68, 20, 85, 63, 21, 14, 85 }

  • 列表

    • [ x for x in data_list if x > 60 ]
    • filter(lambda x: x > 60, data_list) # 注:filter返回的是迭代器
  • 字典
    • { key: val for key, val in d.items() if val > 60 }
  • 集合
    • { x for x in data_set if x > 60 }

为元组元素命名

如果我们的数据有固定的格式如学生信息有姓名、性别、年龄等等,这时我们通常使用元组储存数据,以此减少内存开销。
但因此不能像字典那样以键访问值,因此,我们需要一个兼具字典和元组优点的类型。

> 命名元组 collections.namedtuple

from collections import namedtuple
Student = namedtuple('Student', ['name', 'sex', 'age'])
s1 = Student('Tom', '男', 18)
print(s1[1]) # '男'
print(s1.age) # 18

通过列表、元组创建字典

> dict.fromkeys

如下,我打算统计 data_list 中每个数字出现的频率

data_list = [1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 6, 8, 9, 9]
stat = dict.fromkeys(data_list, 0)
print(stat) # {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 8: 0, 9: 0}
for k in data_list:
stat[k] += 1
print(stat) # {1: 3, 2: 2, 3: 1, 4: 4, 5: 2, 6: 1, 8: 1, 9: 2}

字典排序

假设我有某班数学成绩的字典型数据,我需要对其进行排序

score = {
'龙密': 51,
'于飞': 49,
'朱行': 34,
'赖国': 48,
'杜佺': 37,
'谢香': 55,
'秦香': 30,
'陆玟': 67,
'任姑': 57,
'常晓': 92
}

  • zip + sorted

tmp = zip(score.values(), score.keys()) # zip返回的是迭代器,内容为[(51,'龙密'),(49,'于飞'),(34,'朱行'),...]
result = sorted(tmp) # 使用 sorted(tmp, reverse=True) 进行降序排序
print(tmp) # [(30, '秦香'), (34, '朱行'), (37, '杜佺'), (48, '赖国'), ...]

  • sorted (使用key参数)

print(score.items()) # .items() 返回了元组列表 [('龙密', 51), ('于飞', 49), ('朱行', 34), ...]
result = sorted(score.items(), key=lambda item: item[1])
print(result) # 结果 [('秦香', 30), ('朱行', 34), ('杜佺', 37), ...]

注:似乎第一种快点,是不是很反直觉呀

寻找字典的公共键

利用集合

r1 = {'苏亚雷斯':1,'梅西':2,'本泽马':1,'c罗':3}
r2 = {'苏亚雷斯':1,'c罗':1,'格里兹曼':2,'贝尔':1}
print(r1.keys() & r2.keys()) # { 'c罗', '苏亚雷斯' }

让字典保持有序

> 有序字典 collections.OrderedDict

from collections import OrderedDict
od = OrderedDict()
od['first'] = '这是第一条数据'
od['second'] = '这是第二条数据'
od['third'] = '这是第三条数据'
for key,val in od.items():
print(key, val)
'''输出如下
first 这是第一条数据
second 这是第二条数据
third 这是第三条数据
'''

生成器函数

def getId():
i = 0
while(True):
i += 1
yield i id = getId()
for _ in range(10):
print(next(id))
'''结果
1
2
3
...
'''

yield协程

使用协程计算平均数

def average():
count, total, arg = 0, 0, 0
while True:
val = yield arg
if val:
total += val
count += 1
arg = total / count data = [15, 56, 85, 25, 36, 45, 20, 21, 2]
arg = average()
next(arg) # 预激
for val in data:
print(arg.send(val))
print('平均数:', next(arg))
'''结果
15.0
35.5
52.0
45.25
43.4
43.666666666666664
40.285714285714285
37.875
33.888888888888886
平均数: 33.888888888888886
'''

同时遍历值与下标

> enumerate

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
for i, v in enumerate(seasons):
print('{}: {}'.format(i, v))
'''返回
0: Spring
1: Summer
2: Fall
3: Winter
'''

 

Python3 高级编程技巧(部分)的更多相关文章

  1. python3高级编程

    1. SMTP发送邮件 internet相关协议: http:网页访问相关,httplib,urllib,xmlrpclib ftp:文件传输相关, ftplib, urllib nntp:新闻和帖子 ...

  2. [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader

    高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...

  3. Python3实用编程技巧进阶 ☝☝☝

    Python3实用编程技巧进阶  ☝☝☝ 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等 ...

  4. Python3实用编程技巧进阶✍✍✍

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  5. Python3实用编程技巧进阶

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  6. Python的几个高级编程技巧

    Python有一些技巧对你来说是新知识,但是还有一些技巧会让你的代码效率大幅提升. 本文总结了一下自己用到的一些Python高级编程技巧,希望对大家有帮助. 列表生成器 a=[1,2,3] [x*x ...

  7. python高级编程技巧

    由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr  ...

  8. python 的一些高级编程技巧

    正文: 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合 ...

  9. Python高级编程技巧(转)

    译文:http://blog.jobbole.com/61171/ 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数 ...

随机推荐

  1. 毒瘤dp 学校食堂

    这道dp题 可谓是比较难了,我想了2h 总是觉得自己设的状态没有包涵全部的状态空间 一直想不出来状态 最后败北. 正解是这样的 我们肯定是有一维i的表示 到了i 这个人吃饭了 但是在i吃饭之前后面的7 ...

  2. java 遍历数组常见的3种方式

    1.for循环,最常见 2.利用foreach 3.利用jdk自带的方法  --> java.util.Arrays.toString()

  3. win系统下git代码批量克隆,批量更新

    @REM 根据实际情况设置GIT路径及本地仓库地址 set path=%path%;"D:\Program Files\Git\cmd" set project_path=F:\g ...

  4. 关于SqlServer表结构 2(回归基础)

    关于SqlServer表结构的问题.先来了解一下SqlServer中的数据类型以及它们的用法 整型: 短整型 smallint 整型 int 长整型 bitint 标识列:identity(它是只读的 ...

  5. Elasticsearch权威指南(中文版)

    Elasticsearch权威指南(中文版) 下载地址: https://pan.baidu.com/s/1bUGJmwS2Gp0B32xUyXxCIw 扫码下面二维码关注公众号回复100010 获取 ...

  6. Python实现进度条和时间预估的示例代码

    一.前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  7. Python笔试——毕业旅行问题

    毕业旅行问题 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的 ...

  8. Nexus2 上传文件

    通过管理界面上传 上传文件 hello-nexus.jar 登录 nexus2 选择第三方库 填写文件信息,完成文件上传 在索引页刷新,可以看到上传的文件 服务器上,文件的存放路径是 sonatype ...

  9. 2020-05-14:实现分布式Session的过程是怎样的?

    福哥答案2020-05-14: 此答案来自群员:分布式session ,最开始起源是双机热备,当时php1和php2为了共享session,一开始采用samba/nfs,后来php有了插件以后就扔当时 ...

  10. C#LeetCode刷题之#13-罗马数字转整数(Roman to Integer)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3842 访问. 罗马数字包含以下七种字符: I, V, X, L, ...