目录:

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

很多人学习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. 使用pytorch快速搭建神经网络实现二分类任务(包含示例)

    使用pytorch快速搭建神经网络实现二分类任务(包含示例) Introduce 上一篇学习笔记介绍了不使用pytorch包装好的神经网络框架实现logistic回归模型,并且根据autograd实现 ...

  2. Pytest单元测试框架:插件-allure-pytest环境搭建并在本地生成一个测试报告

    之前写了allure-pytest的官方文档啃的内容,有些交流的朋友,实践起来没什么头绪,所以就有了这篇文章,也给自己填个坑 第一步:搭建Allure.JDK环境 1. 搭建JDK环境 不装jdk你会 ...

  3. Linux学习笔记之ubuntu安装与配置

    1.打开虚拟机,点击新建虚拟机 2.安装向导 选择自定义安装 点击包含一个空白的硬盘 选择linux操作系统,版本是ubuntu 设置虚拟机的名称,可以自己写,还有保存的位置也可自选 根据自己电脑性能 ...

  4. redis(二)redis的主从模式和集群模式

    redis(二)redis的主从模式和集群模式 主从模式 集群模式 主从模式 redis的主从模式,指的是针对多台redis实例时候,只存在一台主服务器master,提供读写的功能,同时存在依附在这台 ...

  5. Web测试转App测试不看不知道

    Web测试 Web通常指的是互联网应用系统,比如税务电子化征管档案系统.金融数据平台.餐饮商家管理后台等等,其实质是C/S的程序. C是Client--客户端,S是Server--服务器. Web中的 ...

  6. Catalina 默认使用zsh了,你可习惯

    zsh 成为默认 shell 淘汰掉我的旧MBP换新后,欢天喜地打开Terminal,感觉有点不对,提示符什么时候变成了 %. 查询了一些资料发现,原来在2019年WWDC期间,苹果推出了macOS ...

  7. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  8. js 打开新窗体

    function nw(repId,formulaId){ if(!repId){ repId='0' } if(!formulaId){ formulaId='0' } var url='/slsi ...

  9. C#LeetCode刷题-栈

    栈篇 # 题名 刷题 通过率 难度 20 有效的括号 C#LeetCode刷题之#20-有效的括号(Valid Parentheses) 33.0% 简单 42 接雨水   35.6% 困难 71 简 ...

  10. Vue 事件的$event参数=事件的值

    template <el-table :data="dataList"> <el-table-column label="id" prop=& ...