通过代码实例了解Python3编程技巧
作者:py鱼 发布时间:2023-07-13 17:48:46
标签:Python,编程,技巧
高效处理数据类型方法:
处理数据
In [1]: from random import randint
In [2]: data=[randint(-10,10) for _ in range(10)]
In [3]: data
Out[3]: [-3, -4, 3, 4, 7, -2, -4, 1, 7, -9]
#过滤列表中的负数
In [9]: list(filter(lambda x:x>=0,data))
Out[9]: [3, 4, 7, 1, 7]
[for x in data if x>=0]
# 列表生成式解法
[x for x in data if x>=0]
#哪个更快,列表解析更快,远快于迭代
In [15]: %timeit [x for x in data if x>=0]
581 ns ± 23.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [16]: %timeit filter(lambda x:x>=0,data)
237 ns ± 4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
#得到20个同学的成绩
d={x:randint(60,100)for x in range(1,21)}
#字典解析式,iteritems同时迭代字典,
#
#得到分数大于90的同学
{k:v for k,v in d.items() if v>90}
#集合解析
In [35]: {x for x in s if x %3 ==0}
Out[35]: {-9, -3, 3}
#为元祖中的每个元素命名,提高程序可读性
#元祖存储空间小,访问速度快
#定义常量
NAME = 0
AGE=1
SEX=2
EMAIL=3
#拆包用法,定义类似其他语言的枚举类型,也就是定义数值常量
NAME,AGE,SEX,EMAIL=range(4)
#案例
student=('Jim',16,'male','jin@163.com')
#name
print(student[0])
#age
print(student[1])
#通过常量可以优化为
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',16,'male','jim@163.com')
s.name
s.age
#统计序列中元素出现的频度
from random import randint
data=[randint(0,20) for _ in range(30)]
#创建字典{0:0,1:0,...}
#方法1
c=dict.fromkeys(data,0)
In [52]: for x in data:
...: c[x]+=1
#方法2,统计词频
from collections import Counter
c2=Counter(data)#讲序列传入Counter的构造器,得到Counter对象是元素频度的字典
#使用most_common统计词频
In [58]: c2.most_common(3)
Out[58]: [(10, 4), (20, 3), (8, 3)]
#统计英文作文词频
import re
txt=open('emmmm.txt').read()
#分割后赋给Counter
c3=Counter(re.split('\W',txt))
#找到频率最高的10个单词
c3.most_common(10)
#内置函数是以c的速度运行,如sorted
from random import randint
d={x:randint(60,100) for x in 'xyzabc'}
#{'a': 91, 'b': 65, 'c': 76, 'x': 85, 'y': 84, 'z': 72}
# sorted(d)
In [15]: zip(d.values(),d.keys())
Out[15]: <zip at 0x108b34dc8>
In [16]: list(zip(d.values(),d.keys()))
Out[16]: [(68, 'x'), (70, 'y'), (77, 'z'), (72, 'a'), (65, 'b'), (69, 'c')]
#快速找到多个字典中的公共键
#In [1]: from random import randint,sample
In [2]: sample('abcdefg',3)
Out[2]: ['c', 'a', 'b']
In [4]: sample('abcdefg',randint(3,6))
Out[4]: ['b', 'a', 'd']
In [5]: s1={x:randint(1,4)for x in sample('abcdefg',randint(3,6))}
In [9]: s1
Out[9]: {'a': 1, 'b': 2, 'c': 3, 'f': 3, 'g': 3}
In [10]: s1={x:randint(1,4)for x in sample('abcdefg',randint(3,6))}
In [11]: s1
Out[11]: {'b': 2, 'd': 3, 'g': 3}
In [12]: s1
Out[12]: {'b': 2, 'd': 3, 'g': 3}
In [13]: s2={x:randint(1,4)for x in sample('abcdefg',randint(3,6))}
In [15]: s3={x:randint(1,4)for x in sample('abcdefg',randint(3,6))}
#for循环遍历方法,找到s2,s3都有的k
In [19]: res=[]
In [20]: for k in s1:
...: if k in s2 and k in s3:
...: res.append(k
...: )
...:
...:
In [21]: res
Out[21]: ['b']
#通过字典的keys()方法,找到三个字典同样的key
In [26]: s1.keys()&s2.keys()&s3.keys()
Out[26]: {'b'}
#通过map得到一个迭代器对象
#In [27]: map(dict.keys,[s1,s2,s3])
Out[27]: <map at 0x108891b70>
In [28]: list(map(dict.keys,[s1,s2,s3]))
Out[28]:
[dict_keys(['g', 'd', 'b']),
dict_keys(['g', 'a', 'c', 'b', 'f']),
dict_keys(['d', 'f', 'b', 'c', 'e', 'a'])]
#通过reduce取出同样结果
In [30]: from functools import reduce
In [31]: reduce(lambda a,b:a&b,map(dict.keys,[s1,s2,s3]))
Out[31]: {'b'}
#使得
from time import time
from random import randint
from collections import OrderedDict
d=OrderedDict()
players = list("ABCDEFGH")
start=time()
for i in range(8):
input()
p=players.pop(randint(0,8-i))
end=time()
print(i+1,p,end-start)
d[p]=(i+1,end-start)
print('')
print('-'*20)
for k in d:
print(k,d[k])
#查看用户历史记录功能,标准库collections的deque,双端循环队列,存在内容中,pickle存储到文件
from random import randint
from collections import deque
N = randint(0,100)
history = deque([],5)
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))
可迭代对象和迭代器对象:
可迭代与迭代器对象
可迭代对象和迭代器对象
需求:从网络抓取每个城市的气温消息,显示
北京:15-20
黑龙江:3-10
上海13-19
一次抓取所有城市信息,会占很大的存储空间,现在想“用时访问”,吧所有城市气温封装到一个对象里,用for迭代
可迭代对象:
In [1]: l=[1,2,3,4,5]
In [2]: s='abcde'
iter内置函数,可以得到一个迭代器对象
由可迭代对象,得到迭代器
iter(l)
In [23]: type(l)
Out[23]: list
In [24]: type(iter(l))
Out[24]: list_iterator
可迭代对象都有__iter方法,可迭代接口
或者__getitem__序列接口
可迭代对象可以通过next()取值
In [26]: t=iter(l)
In [27]: next(t)
Out[27]: 1
In [28]: next(t)
Out[28]: 2
In [29]: next(t)
Out[29]: 3
In [30]: next(t)
Out[30]: 4
In [31]: next(t)
Out[31]: 5
In [32]: next(t)
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-32-f843efe259be> in <module>()
----> 1 next(t)
StopIteration:
读写取excel文件
Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的计算机编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。
xlrd使用方法
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(0)
#访问行数
rows=rsheet.nrows
#访问列数
cols=rsheet.ncols
print('行数:',rows,'列数',cols)
#通过cell的位置坐标取得cell值
cell=rsheet.cell(0,0)
print('0,0坐标的值是:',cell.value)
#取得第二行的值,参数是(行数,起点,终点)
row1=rsheet.row_values(1)
print('第一行的值是:',row1)
xlwt修改excel
# -*- coding:utf-8 -*-
# Author : yuchao
# Data : 2018/7/18 16:08
import xlrd, xlwt
rbook = xlrd.open_workbook('/Users/yuchao/s11.xlsx')
rsheet = rbook.sheet_by_index(0) # 取得sheet对象1
# 列数
nc = rsheet.ncols
# 写入一条数据
rsheet.put_cell(0, nc, xlrd.XL_CELL_TEXT, '总分', None)
# 遍历数据的行数
for row in range(1, rsheet.nrows):
# 求和每一行数据
t = sum(rsheet.row_values(row, 1))
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')
读取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(1)
# 循环Excel文件的所有行
for row in sheet.get_rows():
# 循环一行的所有列
for col in row:
# 获取一个单元格中的值
print(col.value)
来源:https://www.cnblogs.com/pyyu/p/9303106.html
0
投稿
猜你喜欢
- 一般我们能过VS2005的SQL explorer来添加一个本地的MDF文件。也许你可能会出现下面这个问题:Exception Detail
- 1 前言Python开发网络爬虫获取网页数据的基本流程为:发起请求通过URL向服务器发起request请求,请求可以包含额外的header信
- 级联查询在ORACLE 数据库中有一种方法可以实现级联查询select * //要查询的字段from table
- leaflet为R语言提供了API很好用,这次尝试用Python使用leaflet,需要folium安装foliumpip install
- pytorch自定义不可导激活函数今天自定义不可导函数的时候遇到了一个大坑。首先我需要自定义一个函数:sign_fimport torchf
- 1. void ellipse(InputOutputArray img, Po
- 如何终止浏览器的 CAHCE 页面?Function Redirect( NewURL ) If&n
- 1. rangerange是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组
- 前言检测图像中对象颜色的一种简单方法是首先将图像从 RGB 转换为 HSV 颜色空间,然后使用一系列色调检测对象,这可以通过使用 OpenC
- 在看到7yue博客——“换手来用”的思考 有这么一句话:RIA是一个更趋向于“体验”设计的领域,不仅仅包括“开发人员”,还包括“设计人员”,
- WEB标准,从我大二开始接触到毕业后的第一份工作“页面重构工程师”,从接触标准到蓝色理想标准区版主的四年多时间里,WEB标准已经成为我生活中
- 一、 软件介绍 DB2MYSQL是一个可以自动将ACCESS数据库文件转化为对应的SQL代码的软件。可广泛应用于ACCESS数据库转换为MY
- 希腊Web 设计师Christos Chiotis 发表在 CssGlobe 的一篇文章,讲述了黄金分割率在 CSS 中的应用。黄金分割率是
- 假设我们需要从各种网页中提取全文,并且要剥离所有HTML标记。通常,默认解决方案是使用BeautifulSoup软件包中的get_text方
- ImageField的使用笔记今天完善作业写的订单系统,主要是给每一个菜品增加图片,看起来美观一些,但是没想到这个小小的需求花了我一天时间,
- 关于substr、substring和slice方法区别的文章,网上搜到了许多,文章内容也基本一致。而后,我将其中一篇文章中的代码挪到本地进
- 前言什么是树表查询?借助具有特殊性质的树数据结构进行关键字查找。本文所涉及到的特殊结构性质的树包括:二叉排序树。平衡二叉树。使用上述树结构存
- 说来惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下:<?ph
- jinjia和vue.js默认的模板转义符都是{{}}目前的解决办法是修改vue.js的转义符,将原来的{{}}替换为其他标签,我改为{[]
- Filed under 数据库技术Leave a commentSQL Server命令行导数据两种方式bcp和sqlcmd先说一下bcp: