Python3编程技巧
高效处理数据类型方法:
- In []: from random import randint
- In []: data=[randint(-,) for _ in range()]
- In []: data
- Out[]: [-, -, , , , -, -, , , -]
- #过滤列表中的负数
- In []: list(filter(lambda x:x>=,data))
- Out[]: [, , , , ]
- [for x in data if x>=]
- # 列表生成式解法
- [x for x in data if x>=]
- #哪个更快,列表解析更快,远快于迭代
- In []: %timeit [x for x in data if x>=]
- ns ± 23.8 ns per loop (mean ± std. dev. of runs, loops each)
- In []: %timeit filter(lambda x:x>=,data)
- ns ± ns per loop (mean ± std. dev. of runs, loops each)
- #得到20个同学的成绩
- d={x:randint(,)for x in range(,)}
- #字典解析式,iteritems同时迭代字典,
- #
- #得到分数大于90的同学
- {k:v for k,v in d.items() if v>}
- #集合解析
- In []: {x for x in s if x % ==}
- Out[]: {-, -, }
- #为元祖中的每个元素命名,提高程序可读性
- #元祖存储空间小,访问速度快
- #定义常量
- NAME =
- AGE=
- SEX=
- EMAIL=
- #拆包用法,定义类似其他语言的枚举类型,也就是定义数值常量
- NAME,AGE,SEX,EMAIL=range()
- #案例
- student=('Jim',,'male','jin@163.com')
- #name
- print(student[])
- #age
- print(student[])
- #通过常量可以优化为
- print(student[NAME])
- print(student[AGE])
- #namedtuple是继承自tuple的子类,namedtuple和tuple比较有更酷的特性
- #namedtuple创建一个和tuple类似的对象,而且对象拥有可以访问的属性。这对象更像带有数据属性的类,不过数据属性是只读的。
- from collections import namedtuple
- Student = namedtuple('Student',['name','age','sex','email'])
- s=Student('Jim',,'male','jim@163.com')
- s.name
- s.age
- #统计序列中元素出现的频度
- from random import randint
- data=[randint(,) for _ in range()]
- #创建字典{:,:,...}
- #方法1
- c=dict.fromkeys(data,)
- In []: for x in data:
- ...: c[x]+=
- #方法2,统计词频
- from collections import Counter
- c2=Counter(data)#讲序列传入Counter的构造器,得到Counter对象是元素频度的字典
- #使用most_common统计词频
- In []: c2.most_common()
- Out[]: [(, ), (, ), (, )]
- #统计英文作文词频
- import re
- txt=open('emmmm.txt').read()
- #分割后赋给Counter
- c3=Counter(re.split('\W',txt))
- #找到频率最高的10个单词
- c3.most_common()
- #内置函数是以c的速度运行,如sorted
- from random import randint
- d={x:randint(,) for x in 'xyzabc'}
- #{'a': , 'b': , 'c': , 'x': , 'y': , 'z': }
- # sorted(d)
- In []: zip(d.values(),d.keys())
- Out[]: <zip at 0x108b34dc8>
- In []: list(zip(d.values(),d.keys()))
- Out[]: [(, 'x'), (, 'y'), (, 'z'), (, 'a'), (, 'b'), (, 'c')]
- #快速找到多个字典中的公共键
- #In []: from random import randint,sample
- In []: sample('abcdefg',)
- Out[]: ['c', 'a', 'b']
- In []: sample('abcdefg',randint(,))
- Out[]: ['b', 'a', 'd']
- In []: s1={x:randint(,)for x in sample('abcdefg',randint(,))}
- In []: s1
- Out[]: {'a': , 'b': , 'c': , 'f': , 'g': }
- In []: s1={x:randint(,)for x in sample('abcdefg',randint(,))}
- In []: s1
- Out[]: {'b': , 'd': , 'g': }
- In []: s1
- Out[]: {'b': , 'd': , 'g': }
- In []: s2={x:randint(,)for x in sample('abcdefg',randint(,))}
- In []: s3={x:randint(,)for x in sample('abcdefg',randint(,))}
- #for循环遍历方法,找到s2,s3都有的k
- In []: res=[]
- In []: for k in s1:
- ...: if k in s2 and k in s3:
- ...: res.append(k
- ...: )
- ...:
- ...:
- In []: res
- Out[]: ['b']
- #通过字典的keys()方法,找到三个字典同样的key
- In []: s1.keys()&s2.keys()&s3.keys()
- Out[]: {'b'}
- #通过map得到一个迭代器对象
- #In []: map(dict.keys,[s1,s2,s3])
- Out[]: <map at 0x108891b70>
- In []: list(map(dict.keys,[s1,s2,s3]))
- Out[]:
- [dict_keys(['g', 'd', 'b']),
- dict_keys(['g', 'a', 'c', 'b', 'f']),
- dict_keys(['d', 'f', 'b', 'c', 'e', 'a'])]
- #通过reduce取出同样结果
- In []: from functools import reduce
- In []: reduce(lambda a,b:a&b,map(dict.keys,[s1,s2,s3]))
- Out[]: {'b'}
- #使得
- from time import time
- from random import randint
- from collections import OrderedDict
- d=OrderedDict()
- players = list("ABCDEFGH")
- start=time()
- for i in range():
- input()
- p=players.pop(randint(,-i))
- end=time()
- print(i+,p,end-start)
- d[p]=(i+,end-start)
- print('')
- print('-'*)
- for k in d:
- print(k,d[k])
- #查看用户历史记录功能,标准库collections的deque,双端循环队列,存在内容中,pickle存储到文件
- from random import randint
- from collections import deque
- N = randint(,)
- history = deque([],)
- def guess(K):
- if K ==N:
- print('正确')
- return True
- if K < N:
- print('%s is less-than N'%K)
- else:
- print("%s is greater-than N"%K)
- return False
- while True:
- line = input("请输入一个数字:")
- if line.isdigit():
- k=int(line)
- history.append(k)
- if guess(k):
- break
- elif line =='history' or line =='h?':
- print(list(history))
处理数据
可迭代对象和迭代器对象:
- 可迭代对象和迭代器对象
- 需求:从网络抓取每个城市的气温消息,显示
- 北京:-
- 黑龙江:-
- 上海13-
- 一次抓取所有城市信息,会占很大的存储空间,现在想“用时访问”,吧所有城市气温封装到一个对象里,用for迭代
- 可迭代对象:
- In []: l=[,,,,]
- In []: s='abcde'
- iter内置函数,可以得到一个迭代器对象
- 由可迭代对象,得到迭代器
- iter(l)
- In []: type(l)
- Out[]: list
- In []: type(iter(l))
- Out[]: list_iterator
- 可迭代对象都有__iter方法,可迭代接口
- 或者__getitem__序列接口
- 可迭代对象可以通过next()取值
- In []: t=iter(l)
- In []: next(t)
- Out[]:
- In []: next(t)
- Out[]:
- In []: next(t)
- Out[]:
- In []: next(t)
- Out[]:
- In []: next(t)
- Out[]:
- In []: next(t)
- ---------------------------------------------------------------------------
- StopIteration Traceback (most recent call last)
- <ipython-input--f843efe259be> in <module>()
- ----> next(t)
- StopIteration:
可迭代与迭代器对象
读写取excel文件
Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的计算机编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。
- import xlrd
- #打开excel文件,创建一个workbook对象,book对象也就是s11.xlsx文件,表含有sheet名
- rbook=xlrd.open_workbook('/Users/yuchao/s11.xlsx')
- #sheets方法返回对象列表,[<xlrd.sheet.Sheet object at 0x103f147f0>]
- rbook.sheets()
- rsheet=rbook.sheet_by_index()
- #访问行数
- rows=rsheet.nrows
- #访问列数
- cols=rsheet.ncols
- print('行数:',rows,'列数',cols)
- #通过cell的位置坐标取得cell值
- cell=rsheet.cell(,)
- print('0,0坐标的值是:',cell.value)
- #取得第二行的值,参数是(行数,起点,终点)
- row1=rsheet.row_values()
- print('第一行的值是:',row1)
xlrd使用方法
- # -*- coding:utf- -*-
- # Author : yuchao
- # Data : // :
- import xlrd, xlwt
- rbook = xlrd.open_workbook('/Users/yuchao/s11.xlsx')
- rsheet = rbook.sheet_by_index() # 取得sheet对象1
- # 列数
- nc = rsheet.ncols
- # 写入一条数据
- rsheet.put_cell(, nc, xlrd.XL_CELL_TEXT, '总分', None)
- # 遍历数据的行数
- for row in range(, rsheet.nrows):
- # 求和每一行数据
- t = sum(rsheet.row_values(row, ))
- rsheet.put_cell(row, nc, xlrd.XL_CELL_NUMBER, t, None)
- #创建文档对象
- wbook = xlwt.Workbook()
- wsheet = wbook.add_sheet(rsheet.name)
- #设置样式
- style = xlwt.easyxf('align: vertical center, horizontal center')
- #遍历每一行
- for r in range(rsheet.nrows):
- #每一列
- for c in range(rsheet.ncols):
- wsheet.write(r,c,rsheet.cell_value(r,c),style)
- wbook.save('/Users/yuchao/s11_bak.xlsx')
xlwt修改excel
- import xlrd
- from xlrd.book import Book
- from xlrd.sheet import Sheet
- from xlrd.sheet import Cell
- workbook = xlrd.open_workbook('/Users/yuchao/s11.xlsx')
- sheet_names = workbook.sheet_names()
- # sheet = workbook.sheet_by_name('工作表1')
- sheet = workbook.sheet_by_index()
- # 循环Excel文件的所有行
- for row in sheet.get_rows():
- # 循环一行的所有列
- for col in row:
- # 获取一个单元格中的值
- print(col.value)
读取excel
Python3编程技巧的更多相关文章
- python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据
一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...
- Python3实用编程技巧进阶 ☝☝☝
Python3实用编程技巧进阶 ☝☝☝ 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等 ...
- Python3实用编程技巧进阶✍✍✍
Python3实用编程技巧进阶 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- Python3实用编程技巧进阶
Python3实用编程技巧进阶 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据
Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...
- 豆瓣工程师为你解答关于 Python3 编程方面的问题
Python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣.使用Python会遇到这样的问题:什么时候该用多进程?怎样提高代码执行效率?Flask为什么流行?学习Pyt ...
- js异步编程技巧一
异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...
- EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...
- VC多文档编程技巧(取消一开始时打开的空白文档)
VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...
随机推荐
- Hive基础之Hive的存储类型
Hive常用的存储类型有: 1.TextFile: Hive默认的存储类型:文件大占用空间大,未压缩,查询慢: 2.Sequence File:将属于以<KEY,VALUE>的形式序列化到 ...
- storm的定时任务
应用场景: 第一种方法 参考代码StormTopologyTimer1.java package yehua.storm; import java.util.Map; import org.apach ...
- Linux内存管理大图(第三稿)
http://bbs.chinaunix.net/thread-2018659-2-1.html 描述讨论在http://bbs.chinaunix.net/thread-3760371-1-1.ht ...
- django (装饰器,母版继承,自定义,request对象,response对象)
1. 装饰器 1. def wrapper(fn): def inner(*args,**kwargs): 执行被装饰函数之前的操作 ret = fn(*args,** ...
- 深入分析Java Web技术内幕 修订版 pdf
百度网盘:http://pan.baidu.com/s/1slHCCw9
- laravel5.3的多用户登录,经过验证laravel5.4可用【转帖】
简介 在底层代码中,Laravel 的认证组件由 guards 和 providers组成,Guard 定义了用户在每个请求中如何实现认证,例如,Laravel 通过 session guard来维护 ...
- jmap Exception in thread "main" java.io.IOException: 拒绝访问。
环境: 现有一个独立运行的系统S(有独立的jre,但是没jdk),现想通过jmap导出其内存堆栈信息.于是另外安装一个jdk.可是jdk的版本跟S系统的jre不能对应上.出了很多错误. 总是报错: C ...
- 22.OGNL与ValueStack(VS)-默认类Math的访问
转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在loginSuc.jsp中增加如下代码: 调用Math类中的静态方法:&l ...
- CAAnimation临时取消动画,永久取消动画
//临时取消动画 [CATransaction begin]; [CATransaction setDisableActions:YES]; mMyLayer.strokeEnd = 0; [CATr ...
- Jquery和Ajax
jQuery 是一个 JavaScript 函数库.JavaScript 是 HTML5 以及所有现代浏览器中的默认脚本语言! jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 ...