Python进阶全系列
1.推导式
import random#列表解析
L=[random.randint(-10,10) for _ in range(10)]#随机生成长度为10的随机列表
print(L)
#选取大于0的元素
#方法一
print([x for x in L if x>0])#方法二:
g=filter(lambda x:x>0,L)
print(list(g))#字典解析练习
#方法一:
D={'stu%d'%i:random.randint(0,100) for i in range(1,21)}
print(D)
print("优秀的学生如下:\n",{k:v for k,v in D.items() if v>=84})#方法二:
print("优秀的学生如下2:\n",dict(filter(lambda item:item[1]>=85,D.items())))
2.将下标对应到具体含义,提高可读性
"""将下标替换成语义,使代码可读性好的方法
"""
s=("张三",19,"男")
#方法一:赋值
name,age,sex=range(3)
print("方法一:",s[name],s[age],s[sex])#方法二:枚举
from enum import IntEnum
class StudentEnum(IntEnum):NAME=0AGE=1SEX=2
print("方法二:",s[StudentEnum.NAME],s[StudentEnum.AGE],s[StudentEnum.SEX])#方法三:利用构造器构造
from collections import namedtuple
Student=namedtuple('Student',['name','age','sex'])#namedtuple返回一个类,类名为Student
s2=Student('Jim',18,"male")#s2是Student这个类的实例, s2是一个tuple类型
print("方法三(1):",s2.name,s2.age,s2.sex)
print(" s2是一个tuple类型吗?",isinstance(s2,tuple))
#既然s2是元组,那么就可以按照元组方式访问
print("方法三(2):",s2[name],s2[age],s2[sex])
运行结果:
3.根据字典中值的大小,对项进行排序
解决方法:将字典中的各项转换为元组,使用内置函数sorted 排序。
方案一:将字典中的项转化为(值,键)元组。(列表解析或zip )
T=(1,3,1,5,2,6)
print("验证元组是可以排序的:",sorted(T))#元组是可以排序的
print("元组的比较方法与字符串一样:(3,2)>(2,4)?",("Yes" if (3,2)>(2,4) else "No"))
print(" (3,2)>(3,4)?",("Yes" if (3,2)>(3,4) else "No"),end='\n\n')import random
d={k:random.randint(60,100) for k in "abcdefgh"}
print("d=",d)#方案一(1):使用列表解析将字典转换为元组从而比较大小
d1={(v,k) for k,v in d.items()}#因为元组可以比较大小,所以生成元组
print("交换key和value的顺序后:",d1)
print("按照数字从大到小的顺序为:",sorted(d1,reverse=True),end="\n\n")#方案一(2):使用zip
d2=list(zip(d.values(),d.keys()))
print("zip函数的使用介绍:",d2)
print("使用zip方法排序后的结果:",sorted(d2))
方案一的运行结果:
方案二:传递sorted函数的key参数
#方案二:使用sorted的key参数
d3=sorted(d.items(),key=lambda item:item[1],reverse=True)
print("使用sorted的key参数:",d3)
#标记为第一名、第二名...
l3=list(enumerate(d3,1))
print("标记完的结果:",l3)#1表示从1开始,默认为0
dd3={k:(i,v) for i,(k,v) in enumerate(d3,1)}
print("方案二的最终结果为",dd3)
方案二的运行结果:
4.统计序列中元素的频度
方案1:将序列转换为字典{元素:频度},根据字典中的值排序。
import random
data=[random.randint(0,20) for _ in range(30)]
print("data为:",data)
d=dict.fromkeys(data,0)#赋初值全为0,key为data的元素,切去除重复
for x in data:d[x]+=1
print("统计后的结果为:",d)#根据出现频度排序:大->小
dd=sorted(d.items(),key=lambda item:item[1],reverse=True)
print("排序后的结果为:",dd)
print("并找到频度最高的前三个:",dd[:3])#从一大堆数据中找出前三个:堆
import heapq
print("使用堆来寻找前三个元素:",heapq.nlargest(3,((v,k) for k,v in d.items())))#3表示取前三个
方案一的运行结果:
方案二:使用标准库collections中的Counter对象。
#方案二:使用collections中的Counter对象
from collections import Counter
c=Counter(data)
print("使用Counter得到的前三个结果是:",c.most_common(3))
方案二的运行结果:
5.快速找到多个字典中的公共键(key)
方案:利用集合(set)的交集操作
from random import randint,sample
#sample是随机抽取
print("测试sample函数:",sample("abcdefgh",randint(3,6)),end='\n\n')#随机抽取3-6人#创建每一轮的球员,以及对应球员踢得球数
d1={k:randint(1,4) for k in sample("abcdefgh",randint(3,6))}
d2={k:randint(1,4) for k in sample("abcdefgh",randint(3,6))}
d3={k:randint(1,4) for k in sample("abcdefgh",randint(3,6))}
print("第一场:",d1)
print("第二场:",d2)
print("第三场:",d3)
dA=[d1,d2,d3]
#方法一:利用生成器
ans=[k for k in dA[0] if all(map(lambda d:k in d,dA[1:]))]
print("结果为:",ans,end="\n\n")#方法二:利用集合的交集
from functools import reduce
#reduce的运用介绍
print("reduce的运用介绍。 10!=",reduce(lambda x,y:x*y,range(1,11)))
print("方法二的运行结果:",reduce(lambda x,y:x and y,map(dict.keys,dA)))
运行结果:
Python进阶全系列相关推荐
- PHP学习资源整理:入门到进阶全系列
PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率高这 ...
- Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)
前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...
- 零基础编程入门python视频-Python编程零基础小白快速入门完整全系列精品课
1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...
- python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...
SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...
- Python实现爬取豆瓣电影|python豆瓣全栈爬虫:电影系列全爬虫系统1.0:(信息,短评,影评,海报)|你想爬的都有
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 豆瓣电影全系列爬虫系统 免责声明 情况说明 效果展示 主菜单 ...
- Python_杂学系列_3.python进阶
系列文章目录 文章目录 系列文章目录 前言 一.参考资料 二.不定参数*args 和 **kwargs 三.生成器(Generators) 四,Map,Filter 和 Reduce 五,set(集合 ...
- SpringBoot入门建站全系列(六)Spring-data-jpa进阶使用
SpringBoot入门建站全系列(六)Spring-data-jpa进阶使用 上一篇介绍了Mybatis的配置和基本用法<SpringBoot入门建站全系列(五)使用Spring-data-j ...
- python网络爬虫系列教程——Scrapy框架应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...
- python网络爬虫系列教程——PhantomJS包应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了.所以,我们需要有一些好用 ...
- python网络爬虫系列教程——python中pyquery库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...
最新文章
- CRC校验和芯片ID
- CPU time与WALL time
- 五大数据库理念,读懂亚马逊云科技的数据库布局
- 台阶问题(洛谷-P1192)
- 拳王虚拟项目公社:闲鱼怎么卖虚拟资源商品,会不会被封号?虚拟资源自动化出售
- jvm 分代回收算法通俗理解
- 怎样区分直连串口线和交叉串口线?
- 用Java实现HTTP Multipart的服务端和客户端
- Matlab输出换行
- sql if语句实例
- C51语言检测电平变化,单片机引脚上的电平变化
- 中国自动上弦手表市场趋势报告、技术动态创新及市场预测
- Flink 清理 Checkpoint的原理和机制
- 实战项目——智能农业沙盘
- LA 7456 Least Crucial Node
- javascript无限请求_SockJS - 重新连接后无限xhr-streaming呼叫
- Nginx配置支持mp4视频流播放,超简单
- 交通灯系统51单片机设计(附Proteus仿真、C程序、原理图及PCB、论文等全套资料)
- ORACLE表有逻辑坏块时EXPDP导出报错排查
- 《汇编语言》学习(十八)
热门文章
- VS2012 有效注册密钥(截止到2016/9/27仍有效)
- 小组赛,每个小组有5支队伍,互相之间打单循环赛,胜一场3分,平一场1分,输一场不得分,小组前三名出线。平分抽签。问一个队最少拿()分就有理论上的出线希望
- windows 彻底删除360文件 360zipext.dll 等等
- 论文篇-----基于机器学习的交通流预测技术的研究与应用
- 清理autodesk产品注册表_怎么清理Autodesk产品注册表,3dmax,CAD,maya注册表清理方法!...
- 软件测试简历制作技巧与方法
- 12306数据泄露,12306数据库遭网络公开下载,这里提供个账号安全监测工具
- PHP 导出excel合并相同数据单元格
- windows 10 应用商店无法下载安装应用的解决
- 明月浩空播放器php源码,明月浩空音乐播放器