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多文档编程技巧(取消一开始时打开的 ...
随机推荐
- HIbernate编程模型
1.Hibernate: ORM框架,简化SQL开发,编程接口丰富,简化JDBC编程 2.有点: Lazy机制配合Fetch的HQL高级查询,提高开发效率 难点:理解Lazy与Fetch JOIN的原 ...
- CentOS重新加载网卡报错 Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/
重新加载网卡时出现的错误如下: 1 [root@vdb1 dev]# service network restart 2 Shutting down interface eth0: Device st ...
- Configure First SpringMVC project in IntelliJ IDEA(fail)
Configure First SpringMVC project in IntelliJ IDEA 13 The Mechanism of Spring MVC frameworks by Java ...
- placeholder测试
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Tornado 中 PyMongo Motor MongoEngine 的性能测试
最近在使用 Tornado 开发 API,数据库选择了 MongoDB,因为想使用 Geo 搜索的特性.Python 可供选择的 MongoDB Drivers 可以在官网查找. 在这些 Driver ...
- localhost 127.0.0.1
No1: localhost也叫local ,正确的解释是:本地服务器 127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) 他们的解析通过本机的host文件,windows自 ...
- 获取DataView行数据
1. dv.Table.Rows[0]["price"].ToString();这种方法虽然很长,但意思很清晰. 2. dv[0]["price"].T ...
- 使用REGINI修改注册表权限
regini regset.ini 就行啦 regset.ini 是你要修改的数据 1.注册表修改 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr ...
- ABAP-金额小写转大写
FUNCTION ZSDI0007_CH_LOWERTOUPPER. *"---------------------------------------------------------- ...
- Eclipse json文件报错
只要找一个json在线解析,验证你的json文件格式的正确性,错误可以忽略. 如要消除红叉,关闭Json Validation即可,如下操作: Window > Preferences > ...