高效处理数据类型方法:

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编程技巧的更多相关文章

  1. python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据

    一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...

  2. Python3实用编程技巧进阶 ☝☝☝

    Python3实用编程技巧进阶  ☝☝☝ 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等 ...

  3. Python3实用编程技巧进阶✍✍✍

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  4. Python3实用编程技巧进阶

    Python3实用编程技巧进阶  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...

  5. Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据

    Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...

  6. 豆瓣工程师为你解答关于 Python3 编程方面的问题

    Python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣.使用Python会遇到这样的问题:什么时候该用多进程?怎样提高代码执行效率?Flask为什么流行?学习Pyt ...

  7. js异步编程技巧一

    异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...

  8. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  9. VC多文档编程技巧(取消一开始时打开的空白文档)

    VC多文档编程技巧(取消一开始时打开的空白文档) http://blog.csdn.net/crazyvoice/article/details/6185461 VC多文档编程技巧(取消一开始时打开的 ...

随机推荐

  1. direct path read/write (直接路径读/写)

    转载:http://www.dbtan.com/2010/04/direct-path-readwrite.html direct path read/write (直接路径读/写): 直接路径读(d ...

  2. mysql 笔记分享

    mysql LPAD 和RPAD不足位数补齐填充函数总结一下mysql数据库的一些特征MySQL WHERE 语句优化之我见mysql limit 实例详解mysql 如何实现多表联合更新MySQL ...

  3. Java反射机制 —— 简单了解

    一.概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  4. LinkedHashMap唯一,存储取出有序

    package cn.itcast_03; import java.util.LinkedHashMap; import java.util.Set; /* * LinkedHashMap:是Map接 ...

  5. video元素和audio元素

    内容: 1.video元素 2.audio元素 注:这两个元素均是HTML5新增的元素 1.video元素 (1)用途 <video> 标签定义视频,比如电影片段或其他视频流 (2)标签属 ...

  6. 玩转laravel5.4的入门动作(一)

    安装前 1 laravel是用composer来做的依赖关系,所以先下载composer  下载地址在这里https://getcomposer.org/download/   windows lin ...

  7. Mybatis like模糊查询的写法

    转自:http://blog.51cto.com/lavasoft/1386870 Mybatis like查询官方文档没有明确的例子可循,网上搜索了很多,都不正确. Mybatis 3.2.6经过尝 ...

  8. myeclipse 保存失败

    Save FailedCompilation unit name must end with .java, or one of the registered Java-like extensions ...

  9. Spring Boot实践——Mybatis分页插件PageHelper的使用

    出自:https://blog.csdn.net/csdn_huzeliang/article/details/79350425 在springboot中使用PageHelper插件有两种较为相似的方 ...

  10. Spring Colud 学习

    转自:    http://blog.csdn.net/forezp/article/details/70148833#t0