Python3 高级编程技巧(部分)
目录:
在列表、字典、集合中筛选数据
很多人学习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 高级编程技巧(部分)的更多相关文章
- python3高级编程
1. SMTP发送邮件 internet相关协议: http:网页访问相关,httplib,urllib,xmlrpclib ftp:文件传输相关, ftplib, urllib nntp:新闻和帖子 ...
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader
高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...
- Python3实用编程技巧进阶 ☝☝☝
Python3实用编程技巧进阶 ☝☝☝ 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等 ...
- Python3实用编程技巧进阶✍✍✍
Python3实用编程技巧进阶 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- Python3实用编程技巧进阶
Python3实用编程技巧进阶 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- Python的几个高级编程技巧
Python有一些技巧对你来说是新知识,但是还有一些技巧会让你的代码效率大幅提升. 本文总结了一下自己用到的一些Python高级编程技巧,希望对大家有帮助. 列表生成器 a=[1,2,3] [x*x ...
- python高级编程技巧
由python高级编程处学习 http://blog.sina.com.cn/s/blog_a89e19440101fb28.html Python列表解析语法[]和生成 器()语法类似 [expr ...
- python 的一些高级编程技巧
正文: 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合 ...
- Python高级编程技巧(转)
译文:http://blog.jobbole.com/61171/ 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数 ...
随机推荐
- NameNode中的高可用方案
NN中元数据的可靠性是可以保证的,但是其可用性并不高,因为Namenode是单节点的,所以一旦这个节点不能工作,那么整个hdfs都不能工作,但是由于SecondaryNameNode的机制,所以,即便 ...
- python种类
JPython IronPython CPython JavaScriptPython 等等. 这些python的区别是他们隶属于不同的厂商,而我们所说的python通常是指CPython, 因为不同 ...
- 移动物体监控系统-sprint3移动监控主系统设计与开发
一.移动监控的原理 通过获取摄像头图像,比较前后每一帧的图像数据,从而实现移动物体监控.所有移动监控原理都是这样,只是图像帧的对比的算法不一样. 二.移动物体监控系统的实现 选择开源的移动监控软件mo ...
- 嵌入式linux简介
嵌入式linux系统应用非常广泛,涵盖各行各业,基于ARM.mips等微处理器架构的硬件平台.基于嵌入式linux系统的设备已经深入生活中各个角落,随处可见. 我们常说的嵌入式linux系统,其实 ...
- 新老版本vue-cli的安装及创建项目等方式的比较
vue-cli 3.0 正式版于2018年8月发布,截至到2020年08月05日版本已经更新到4.4.6.Vue CLI 的包名称由 vue-cli 改成了 @vue/cli,目前网上很多的Vue项目 ...
- 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
在IDEA中将xxxMapper.xml文件创建在(src/main/java)目录中,运行报错:org.apache.ibatis.binding.BindingException: Invalid ...
- PyQt QML
- HttpClient 模拟用户操作
首先模拟用户登录: /** * 模拟用户登录 * */ private void login() throws HttpException, IOException { PostMethod logi ...
- 2020-07-21:简述redis主从同步的过程。
福哥答案2020-07-21: 1.从服务发送一个sync同步命令给主服务要求全量同步.2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成 ...
- 2020-06-02:千万级数据量的list找一个数据。
福哥答案2020-06-02: 对于千万级长度的数组单值查找:序号小的,单线程占明显优势:序号大的,多线程占明显优势.单线程时间不稳定,多线程时间稳定. go语言测试代码如下: package mai ...