python基础 常见用法
1、python计时器timeit模块
1)timeit 模块定义了接收两个参数的Timer类,两个参数都是字符串。
参数1:要计时的语句或者函数
参数2:为参数1构建环境的导入语句
2)Timer对象主要有两个方法:
timeit(n):接收一个参数,表示每次计时时,执行被计时语句的次数,返回值为秒,默认100万次。
repeat(n1,n2):接收两个参数,返回每次测试的耗时列表,单位为秒。
参数1:重复整个测试的次数,默认为3
参数2:每次测试中,调用被计时语句的次数,默认是100万次
2、根据条件从列表中过滤数据:过滤大于0的元素
from random import randint
data = [randint(-10,10) for x in range(10)]
思路:
1)遍历过滤
res1 = []
for x in data:
if x>=0:
res1.append(x)
2)列表过滤
res2 = [x for x in data if x>=0]
3)使用filter函数过滤
res3 = list(filter(lambda x :x>=0, data))
3、根据字典值筛选出符合条件的元素:筛选出分数大于90的学生
student = {x:randint(60,100) for x in "abcdefg"}
res = {k:v for k,v in student.items() if v>=90}
4、筛选出集合中能够被3整除的元素
data = set(randint(0,20) for x in range(10))
res = {x for x in data if x%3==0}
5、解决只能通过下标访问元组元素的方法:
通过标准库中的collections.namedtuple
namedtuple是一个函数,它的本质上就是创建了一个类对象。并规定了tuple元素的个数,并可以用属性而不是索引来引用tuple元素的个数。
通常情况下,如果我们要创建一个类对象,是这样做的:
class Student():
def __init__(self, name, age, gender, mail):
self.name = name
self.age = age
...
然后实例化对象 stu = Student(("john","34","male","1@1.com")
现在我们可以通过namedtuple来创建这样一个Student对象:
from collections import namedtuple
stu = namedtuple("Student",["name", "age","gender", "mail"])
data = stu("john","34","male","1@1.com")
data.name = "john"
namedtuple还支持传入关键字参数或是tuple,list,字典等的方式
# 传入关键字参数
data = stu(name="john", age=34, gender='male', mail="1@1.com")
# 传入tuple
stu_info = ("john","34","male")
data = stu(*stu_info, mail='1@1.com')
# 传入list
stu_info = ["john","34","male"]
data = stu(*stu_info, mail='1@1.com')
# 传入dict
stu_info = {
"name":"john",
"age":34,
"gender":"male",
}
data = stu(**stu_info, mail='1@1.com')
另外由于namedtuple继承自tuple,所以它也具备tuple的拆分属性
name, age, *others = data
print(name, age, others) #john, 34, ['male', 1@1.com]
6、排序
对字典进行排序:
【sorted(data, key=lambda x:x[1], reverse=True)】
三个参数:
1)data:待排序字典
2)key:排序依据:lambda x:x[1] 根据值进行排序,如果是x[0]是根据key进行排序
3)reverse:True-->倒序排列,False-->正序排列
data = [randint(1,10) for x in range(20)]
d = dict.fromkeys(data,0)
for x in data:
if x in d.keys():
d[x] += 1
res = sorted(d.items(), key=lambda x:x[1], reverse=True) # 倒序排列
res[0],res[1],res[2]
7、统计一篇文章中出现次数最多的10个单词及其出现的次数
【使用标准库中的collections.Counter对象】Counter是一个简单的计数器,是dict的一个子类。
将序列传递给Counter的构造器,得到的是Counter对象是统计过频率的字典
调用Counter.most_common(n),得到出现次数最多的n个单词
from collections import Counter
txt = open(filePath, "r").read()
import re
txt_list = re.split("\W+", txt) # 将txt以非字母数字下划线等字符分割
c = Counter(txt_list)
c.most_common(10)
如果有多篇文章需要统计,我们可以分别统计再将统计后的Counter对象合并。如:
c1 = Counter("hfiehfiabfnjefhef")
c2 = Counter("fhiofeifoegiefje")
c2.update(c1)
print(c2) # 这里c2就是经过合并后的统计结果了。
8、快速找到多个字典的公共key
如找到一个班级中所有科目都在90分以上的同学
解决思路:
1)使用常规的遍历方式,先遍历某一科90分以上的同学,然后判断该同学是否也在其他90分以上的科目的同学中
2)使用集合的交集
3)可以使用python内置的map和reduce搭配使用过滤
map(function, list)
reduce(function,list[,initializer])
map和reduce的区别:map的function接收一个参数;reduce的function接收两个参数
stu = ["Lilei","Hanmeimei","John","Luly","Lucy","Lily","Lintao","Polly","Fiona"]
chinese = {s:randint(60,100) for s in stu}
english = {s:randint(60,100) for s in stu}
math = {s:randint(60,100) for s in stu}
chinese_gt90 = {s:c for s,c in chinese.items() if c>=90}
english_gt90 = {s:c for s,c in english.items() if c>=90}
math_gt90 = {s:c for s,c in math.items() if c>=90}
上1):
res = []
for s in chinese_gt90.keys():
if s in english_gt90.keys() and s in math_gt90.keys():
res.append(s)
上2):
chinese_gt90.items() & english_gt90.items() & math_gt90.items()
上3):
m = map(dict.keys, [chinese_gt90,english_gt90,math_gt90])
from functools import reduce
def red(x,y):
return x&y
res = reduce(red,m)
9、根据用户提交成绩的时间打印成绩排名和姓名及成绩
需要使用到有序字典OrderedDict,它是按照插入顺序排序,不是key本身排序。
模拟用户提交系统:
from collections import OrderedDict
from time import time
from random import randint
start = time()
total = len(stu)
d = OrderedDict()
for i in range(len(stu)):
input()
t = time()-start
name = stu.pop(randint(0,total-1-i))
d[name] = (i+1, t)
10、python实现历史记录功能
解决思路:通过容量为n的队列deque实现,再通过pickle将数据保存到本地文件
list是线性存储,通过索引访问元素很快,但是要插入或删除数据就很慢了,deque就是为了高效了插入和删除操作的双向列表。deque除了实现了list的append和pop方法外,还支持appendleft和popleft方法,可以高效的往头部添加和删除元素。
from collections import deque
from random import randint
import pickle
import re
def guessNum():
num = randint(60,100)
d = deque(maxlen = 5)
print("猜字谜游戏开始,请输入数字...")
while True:
inputNum = input()
if inputNum=="h?":
print(list(d))
continue
if inputNum == ";":
print("手动结束了游戏")
with open(file,"wb") as f:
pickle.dump(list(d), f)
break
if not re.match("^\d+$",inputNum):
print("请输入数字")
continue
inputNum=int(inputNum)
d.append(inputNum)
if inputNum<num:
print("输入的数字太小")
elif inputNun>num:
print("输入的数字太大")
else:
print("猜对了~")
with open(file, "wb") as f:
pickle.dump(list(d), f)
break
python基础 常见用法的更多相关文章
- python map 常见用法
python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...
- python基础-range用法_python2.x和3.x的区别
#range帮助创建连续的数字,通过设置步长来指定不连续 python2.7 #直接就在内存中创建出来(0-99) >>> range(100)[0, 1, 2, 3, 4, 5, ...
- python 基础的用法新发现
引用的发现: # 引用的处理 因为变量指的是某一内存地址 引用变量实际是引用一个固定的内存地址,# 当这个变量中的内容变了之后,他的内存地址不变, 所以引用者也动态的得到了变化的变量l1=[1,2,3 ...
- python list常见用法
来至builtins.py: def extend(self, iterable): # real signature unknown; restored from __doc__ "&qu ...
- python基础===Python 代码优化常见技巧
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
- python中os模块和sys模块的常见用法
OS模块的常见用法 os.remove() 删除文件 os.rename() 重命名文件 os.walk() 生成目录树下的所有文件名 os.chdir() 改变目录 os.mkd ...
- 【Python基础】*args,**args的详细用法
Python基础知识:*args,**args的详细用法 参考:https://blog.csdn.net/qq_29287973/article/details/78040291 *args 不定 ...
- Python基础学习Day4 列表的使用方法、range 用法、in用法
一.列表 1.1列表:python基础数据类型之一:其他语言也有列表的概念,js 数组,可索引 ,可切片,可加步长 1.2列表的索引,切片,切片+ 步长 结果: 注意:列表里元素的数据类型,就是它本身 ...
- python之模块pprint之常见用法
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块pprint之常见用法 import pprint data = [(1,{'a':'A' ...
随机推荐
- Windows10系统:任务栏中电池图标消失问题的解决方法
一.问题: 电池图标对我们来说,基本是没有什么操作对它进行的,但这并不代表它不重要. 持续充电的时候自然觉得没什么,但一旦电脑脱离充电状态,我们还是会经常性地把鼠标放在电池图标上.只有清楚地了解电脑的 ...
- Spring之旅第二篇-Spring IOC概念及原理分析
一.IOC概念 上一篇已经了解了spring的相关概念,并且创建了一个Spring项目.spring中有最重要的两个概念:IOC和AOP,我们先从IOC入手. IOC全称Inversion of Co ...
- 从零开始学习PYTHON3讲义(九)字典类型和插入排序
<从零开始PYTHON3>第九讲 第六讲.上一讲我们都介绍了列表类型.列表类型是编程中最常用的一种类型,但也有挺明显的缺陷,比如: data = [5,22,34,12,87,67,3,4 ...
- 【Android Studio安装部署系列】三十六、Android studio3.2使用过程中注意事项
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio升级到3.2之后,运行旧项目的时候出现了各种情况,特此记录下. 一.打包选项多了,一般情况下选择APK即 ...
- 学习笔记01(mybatis逆向工程)
今天来看看一个常用的小功能,就是mybatis的逆向工程.(数据库是mysql) 什么是逆向工程呢?看名字就知道反方向的一个什么工程! 其实啊,如果是平常我们自己学习实践一些小项目的时候,应该是先瞎写 ...
- SpringBoot整合Jsp和Thymeleaf (附工程)
前言 本篇文章主要讲述SpringBoot整合Jsp以及SpringBoot整合Thymeleaf,实现一个简单的用户增删改查示例工程.事先说明,有三个项目,两个是单独整合的,一个是将它们整合在一起的 ...
- JVM平台上的响应式流(Reactive Streams)规范
// Reactive Streams // 响应式流是一个倡议,用来为具有非阻塞后压的异步流处理提供一个标准.大家努力的目标集中在运行时环境(JVM和JavaScript)和网络协议上. 注:响应式 ...
- nginx优化之配置文件优化一常用参数
#定义nginx运行的用户和用户组 user www www; #启动进程,通常设置成和cpu的数量相等 worker_processes 8 ; #为每个进程分配CPU,上面京8个进程分配到 ...
- C#/VB.NET设置Excel表格背景色
在查看很多有复杂的数据的表格时,为了能够快速地找到所需要的数据组时,往往需要对该数据组进行分类,一个简单快速的方法就是对数据组所在的单元格填充背景颜色,这样就使得我们在阅读文件时能够直观的看到数据分类 ...
- PHP一些常用的正则表达式分享给大家
一.校验数字的表达式 1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 至少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和非零开头的数字:^(0|[1-9][0- ...