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进阶全系列相关推荐

  1. PHP学习资源整理:入门到进阶全系列

    PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率高这 ...

  2. Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...

  3. 零基础编程入门python视频-Python编程零基础小白快速入门完整全系列精品课

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

  4. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  5. Python实现爬取豆瓣电影|python豆瓣全栈爬虫:电影系列全爬虫系统1.0:(信息,短评,影评,海报)|你想爬的都有

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 豆瓣电影全系列爬虫系统 免责声明 情况说明 效果展示 主菜单 ...

  6. Python_杂学系列_3.python进阶

    系列文章目录 文章目录 系列文章目录 前言 一.参考资料 二.不定参数*args 和 **kwargs 三.生成器(Generators) 四,Map,Filter 和 Reduce 五,set(集合 ...

  7. SpringBoot入门建站全系列(六)Spring-data-jpa进阶使用

    SpringBoot入门建站全系列(六)Spring-data-jpa进阶使用 上一篇介绍了Mybatis的配置和基本用法<SpringBoot入门建站全系列(五)使用Spring-data-j ...

  8. python网络爬虫系列教程——Scrapy框架应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 安装 在cmd中输入 Scrapy的安装依赖wheel.twiste.lxml包.所以先通过pip install wheel安装wheel库 ...

  9. python网络爬虫系列教程——PhantomJS包应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了.所以,我们需要有一些好用 ...

  10. python网络爬虫系列教程——python中pyquery库应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...

最新文章

  1. CRC校验和芯片ID
  2. CPU time与WALL time
  3. 五大数据库理念,读懂亚马逊云科技的数据库布局
  4. 台阶问题(洛谷-P1192)
  5. 拳王虚拟项目公社:闲鱼怎么卖虚拟资源商品,会不会被封号?虚拟资源自动化出售
  6. jvm 分代回收算法通俗理解
  7. 怎样区分直连串口线和交叉串口线?
  8. 用Java实现HTTP Multipart的服务端和客户端
  9. Matlab输出换行
  10. sql if语句实例
  11. C51语言检测电平变化,单片机引脚上的电平变化
  12. 中国自动上弦手表市场趋势报告、技术动态创新及市场预测
  13. Flink 清理 Checkpoint的原理和机制
  14. 实战项目——智能农业沙盘
  15. LA 7456 Least Crucial Node
  16. javascript无限请求_SockJS - 重新连接后无限xhr-streaming呼叫
  17. Nginx配置支持mp4视频流播放,超简单
  18. 交通灯系统51单片机设计(附Proteus仿真、C程序、原理图及PCB、论文等全套资料)
  19. ORACLE表有逻辑坏块时EXPDP导出报错排查
  20. 《汇编语言》学习(十八)

热门文章

  1. VS2012 有效注册密钥(截止到2016/9/27仍有效)
  2. 小组赛,每个小组有5支队伍,互相之间打单循环赛,胜一场3分,平一场1分,输一场不得分,小组前三名出线。平分抽签。问一个队最少拿()分就有理论上的出线希望
  3. windows 彻底删除360文件 360zipext.dll 等等
  4. 论文篇-----基于机器学习的交通流预测技术的研究与应用
  5. 清理autodesk产品注册表_怎么清理Autodesk产品注册表,3dmax,CAD,maya注册表清理方法!...
  6. 软件测试简历制作技巧与方法
  7. 12306数据泄露,12306数据库遭网络公开下载,这里提供个账号安全监测工具
  8. PHP 导出excel合并相同数据单元格
  9. windows 10 应用商店无法下载安装应用的解决
  10. 明月浩空播放器php源码,明月浩空音乐播放器