Python 的更多的方法.docx
- 文档编号:14446834
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:13
- 大小:21.73KB
Python 的更多的方法.docx
《Python 的更多的方法.docx》由会员分享,可在线阅读,更多相关《Python 的更多的方法.docx(13页珍藏版)》请在冰点文库上搜索。
Python的更多的方法
Python的列表数据类型包含更多的方法
list.append(x)把一个元素添加到列表的结尾。
list.extend(L)将一个给定列表中的所有元素都添加到另一个列表中。
list.insert(i,x)在指定位置插入一个元素。
第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0,x)会插入到整个列表之前,而a.insert(len(a),x)相当于a.append(x)。
list.remove(x)删除列表中值为x的第一个元素。
如果没有这样的元素,就会返回一个错误。
list.pop([i])从列表的指定位置删除元素,并将其返回。
如果没有指定索引,a.pop()返回最后一个元素。
元素随即从链表中被删除。
(方法中i两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,这个经常会在Python库参考手册中遇到这样的标记。
)
list.index(x)返回列表中第一个值为x的元素的索引。
如果没有匹配的元素就会返回一个错误。
list.count(x)返回x在链表中出现的次数。
list.sort(cmp=None,key=None,reverse=False)对列表中的元素进行排序(参数可以用来自定义排序方法,参考sorted()的更详细的解释)。
list.reverse()就地倒排链表中的元素
dellist[i]有个方法可以从列表中按给定的索引而不是值来删除一个子项:
del语句。
它不同于有返回值的pop()方法。
语句del还可以从列表中删除切片或清空整个列表(我们以前介绍过一个方法是将空列表赋值给列表的切片)。
dict()构造函数可以直接从key-value对中创建字典:
dict([('sape',4139),('guido',4127),('jack',4098)])
dict.fromkeys(['a','b'],0)
dict(zip(['a','b','c'],[1,2,3]))
{k:
vfor(k,v)inzip(['a','b','c'],[1,2,3])}
{x:
x**2forxin(2,4,6)}
D=dict(a=1,b=2,c=3)
{c:
c*4forcin['JoinQuant']}
{c.lower():
c*4+'!
'forcin'JoinQuant'}
元组
任意无符号的对象,以逗号隔开,默认为元组
(print'abc',-4.24e93,18+6.6j,'xyz'
x,y=1,2;)
元组数据类型包含更多的方法:
tup.index(x,[start,[stop]]))返回元组中start到stop索引中第一个值为x的元素在整个列表中的索引。
如果没有匹配的元素就会返回一个错误。
tup.count(x)返回x在元组中出现的次数。
cmp(tuple1,tuple2)比较元组中两个元素。
len(tuple)计算元组元素个数。
max(tuple)返回元组中元素最大值。
min(tuple)返回元组中元素最小值。
tuple(seq)将列表转换为元组。
元组不提供字符串、列表和字典中的方法。
如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法。
集合
集合(set)是一个无序不重复元素的集。
基本功能包括关系运算和消除重复元素。
比如支持union(联合),intersection(交),difference(差)和sysmmetricdifference(对称差集)等数学关系运算。
所有集合方法
S.issubset(t)如果s是t的子集,则返回True,否则返回False
S.issuperset(t)如果s是t的超集,则返回True,否则返回False
S.unoin(t)返回一个新集合,该集合是s和t的并集,也可用s1|s2,但不能用s1+s2
S.intersection(t)返回一个新集合,该集合是s和t的交集,,也可用s1&s2
S.difference(t)返回一个新集合,该集合是s的成员,但不是t的成员,,也可用s1-s2
S.symmetric_difference(t)对称差分是集合的异或,返回一个新集合,该集合是s或t的成员,但不是s和t共有的成员,也可用s1^s2
S.copy()返回一个新集合,该集合是s的复制
仅适合可变集合
S.update(t)用t中的元素修改s,即s现在包括s或t的成员
S.intersection_updates中的成员是共同属于s和t的元素
S.difference_updates中的成员是属于s但不包含在t中的元素
S.symmetric_difference_updates中的成员更新为那些包含在s或t中,但不是s和t共有的元素
S.add(obj)在集合s中添加对象obj
S.remove(obj)从集合s中删除对象obj,如果obj不是集合s中的元素将有错误
S.discard(obj)如果obj是集合s中的元素,从集合s中删除对象obj
S.pop()删除集合s中的任意一个对象,并返回它
S.clear()删除集合s中的所有元素
集合推导式语法:
a={xforxin'abracadabra'ifxnotin'abc'}#'abc'默认是集合
Python提供了for循环和while循环(在Python中没有do...while循环),for循环一般比while计数器循环运行得更快
break语句,在语句块执行过程中终止循环,并且跳出整个循环
continue语句,在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass语句,是空语句,是为了保持程序结构的完整性。
不做任何事情,一般用做占位语句。
循环else块,只有当循环正常离开时才会执行(也就是没有碰到break语句)
If/While/for
定义可变参数和定义list或tuple参数相比,仅仅在参数前面加了一个*号。
在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。
但是,调用该函数时,可以传入任意个参数,包括0个参数。
#必选参数,默认参数,‘*’表可变参数,‘**’表关键字参数
deffunc(a,b,c=0,*args,**kw):
print'a=',a,'b=',b,'c=',c,'args=',args,'kw=',kw
调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:
func(1,2,3),又可以先组装list或tuple,再通过*args传入:
func(*(1,2,3));
关键字参数既可以直接传入:
func(a=1,b=2),又可以先组装dict,再通过**kw传入:
func(**{'a':
1,'b':
2})。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
Python查找名字的规则是LGB规则:
大多数名字引用在三个作用域中查找:
先局部(Local),次之全局(Global),再次之内置(Build-in)。
python使用lambda来创建匿名函数:
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。
仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
importtime
start=time.clock()
fib=lambdan,x=0,y=1:
xifnotnelsefib(n-1,y,x+y)
printfib(20)
end=time.clock()
print"read:
%fs"%(end-start)
<==>deffib(num):
result=[0,1]
foriinrange(num-2):
result.append(result[-2]+result[-1])
returnresult
printfib(15)
斐波那契数列:
斐波那契数列由十三世纪意大利数学家斐波那契发现。
数列中的一系列数字常被人们称之为神奇数奇异数。
具体数列为:
0,1,1,2,3,5,8,13,21,34,55,89,144,233等,从该数列的第三项数字开始,每个数字等于前两个相邻数字之和。
而斐波那契数列中相邻两项之商就接近黄金分割数0.618,与这一数字相关的0.191、0.382、0.5和0.809等数字就构成了股市中关于市场时间和空间计算的重要数字。
在金融市场的分析方法中,斐波那契数字频频出现。
例如,在波浪理论中,一轮牛市行情可以用1个上升浪来表示,也可以用5个低一个层次的小浪来表示,还可继续细分为21个或89个小浪;在空间分析体系中,反弹行情的高度通常是前方下降趋势幅度的0.382、0.5、0.618;回调行情通常是前方上升趋势的0.382、0.5和0.618。
一、常见的几种迭代器
迭代器在python中是以C语言的速度运行的,而while循环版本则是通过Python虚拟机运行Python字节码的。
range
zip可以让我们使用for循环来并行使用多个序列,zip会取得一个或多个序列为参数,然后返回元组的列表,将这些序列中的并排的元素配成对。
enumerate可以获得元素和元素的偏移值
mapmap会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含所有函数调用结果的一个列表。
filter基于某一测试函数过滤出一些元素
reduce对每对元素都应用函数并运行到最后结果
Range:
S='abcdefghijk'
foriinrange(0,len(S),2):
printS[i]
<==>
S='abcdefghijk'
forcinS[:
:
2]:
printc
Zip:
L1=[1,2,3,4]
L2=[5,6,7,8]
for(x,y)inzip(L1,L2):
print(x,y,x+y)
#构造字典
keys=['a','b','c']
vals=[1,3,5]
D2={}
for(k,v)inzip(keys,vals):
D2[k]=v
Enumerate:
seasons=['Spring','Summer','Fall','Winter']
dict(enumerate(seasons,start=3))
Out[1]:
{3:
'Spring',4:
'Summer',5:
'Fall',6:
'Winter'}
Map:
map((lambdax:
x+3),[1,2,3,4])Out[2]:
[4,5,6,7]
Reduce:
reduce((lambdax,y:
x+y),[1,2,3,4])Out[3]:
10
importoperator,functools
functools.reduce(operator.add,[2,4,6])
Out[4]:
12
列表推导式:
列表推导式由包含一个表达式的括号组成,表达式后面跟随一个for子句,之后可以有零或多个for或if子句。
结果是一个列表,由表达式依据其后面的for和if子句上下文计算而来的结果构成。
Eg:
[(x,y)forxin[1,2,3]foryin[3,1,4]ifx!
=y]
Out:
[(1,3),(1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]
matrix=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
list(zip(*matrix))
Out:
[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
Numpy库
数组的一些属性:
a.ndim#查看行数
a.shape#查看数组的维数,返回(n,m),其中n为行数,m为列数。
a.dtype#查看元素的类型,比如numpy.int32、numpy.float64
Numpy的特殊数组主要有以下几种:
zeros数组:
全零数组,元素全为0;np.zeros((2,3))
ones数组:
全1数组,元素全为1;np.ones((3,4))
empty数组:
空数组,元素全近似为0;np.empty((3,2))
序列数组:
arange函数:
他与Python的range函数相似,但他属于Numpy库,其参数依次为:
开始值、结束值、步长。
Eg:
In[22]:
np.arange(1,20,5)
Out[22]:
array([1,6,11,16])
linspace函数创建等差序列数组,其参数依次为:
开始值、结束值、元素数量。
Eg:
In[23]:
np.linspace(0,2,9)
Out[23]:
array([0.,0.25,0.5,0.75,1.,1.25,1.5,1.75,2.])
#b[i,j]表示什么?
b=np.ones((2,3))
b[1,2]=9
矩阵;
矩阵的常用数学运算有转置(A.T)、乘法(A*B)、求逆(A.I)、解线性方程(solve(A,B))等。
Pandas
Series:
一维数组,与Numpy中的一维array类似。
二者与Python基本的数据结构List也很相近,其区别是:
List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
DataFrame:
二维的表格型数据结构。
很多功能与R中的data.frame类似。
可以将DataFrame理解为Series的容器。
以下的内容主要以DataFrame为主。
Panel:
三维的数组,可以理解为DataFrame的容器。
DataFrame:
eg:
dates=pd.date_range('20130101',periods=6)
Out[6]:
DatetimeIndex(['2013-01-01','2013-01-02','2013-01-03','2013-01-04',
'2013-01-05','2013-01-06'],dtype='datetime64[ns]',freq='D',tz=None)##
df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
查看前几条数据:
df.head();
查看后几条数据:
df.tail()
查看DataFrame的值:
df.values
查看DataFrame的索引:
df.index
查看DataFrame的列名:
df.columns
使用describe()函数对于数据的快速统计汇总:
df.describe()
按列对DataFrame进行排序:
df.sort(columns='open')
选择数据:
通过下标选取数据:
df['open']<==>df.open(返回一个Series)
df[['open','close']](选取多列)
df['a':
'b'](起始的索引名称到结束索引名称选取数据,含’b’列)
df[0:
3](从0到2,不含3)
df['2016-07-05':
'2016-07-08'](返回一个df)
使用标签选取数据:
df.loc[行标签,列标签]
df.loc['a':
'b']#选取ab两行数据
df.loc[:
'open']#选取open列的数据
df.loc的第一个参数是行标签,第二个参数为列标签(可选参数,默认为所有列标签),两个参数既可以是列表也可以是单个字符,如果两个参数都为列表则返回的是DataFrame,否则,则为Series。
PS:
loc为location的缩写。
使用位置选取数据:
df.iloc[行位置,列位置]
df.iloc[1,1]#选取第二行,第二列的值,返回的为单个值
df.iloc[[0,2],:
]#选取第一行及第三行的数据
df.iloc[0:
2,:
]#选取第一行到第三行(不包含)的数据
df.iloc[:
1]#选取所有记录的第二列的值,返回的为一个Series
df.iloc[1,:
]#选取第一行数据,返回的为一个Series
PS:
iloc则为integer&location的缩写
更广义的切片方式是使用.ix,它自动根据给到的索引类型判断是使用位置还是标签进行切片。
通过逻辑指针进行数据切片:
df[逻辑条件]
df[df.one>=2]#单个逻辑条件
df[(df.one>=1)&(df.one<3)]#多个逻辑条件组合
过滤出指定条件的数据:
df[df['high'].isin([0.00,9.00])]
#选取high列中数为0和9的数。
pandas库之数据处理与规整
缺失数据处理:
去掉包含缺失值的行:
df.dropna()
对缺失值进行填充:
df.fillna(value=0)
判断数据是否为nan,并进行布尔填充:
pd.isnull(df)
函数的应用和映射:
df.mean()#列计算平均值
df.mean
(1)#行计算平均值
df.sort_index()#行名字排序
df.mean(axis=1,skipna=False)#skipna参数默认是True表示排除缺失值
df.sort_index()#行名字排序
df.sort_index(axis=1)#列名字排序
df.sort_index(axis=1,ascending=False)#数据默认是按升序排序的,也可以降序排序
常用的方法如上所介绍们,还要其他许多,可自行学习,下面罗列了一些,可供参考:
count非na值的数量
describe针对Series或个DataFrame列计算汇总统计
min、max计算最小值和最大值
argmin、argmax计算能够获取到最大值和最小值得索引位置(整数)
idxmin、idxmax计算能够获取到最大值和最小值得索引值
quantile计算样本的分位数(0到1)
sum值的总和
mean值得平均数
median值得算术中位数(50%分位数)
mad根据平均值计算平均绝对离差
var样本值的方差
std样本值的标准差
skew样本值得偏度(三阶矩)
kurt样本值得峰度(四阶矩)
cumsum样本值得累计和
cummin,cummax样本值得累计最大值和累计最小值
cumprod样本值得累计积
diff计算一阶差分(对时间序列很有用)
pct_change计算百分数变化
数据规整:
concat可以沿一条轴将多个对象堆叠到一起。
append将一行连接到一个DataFrame上
duplicated移除重复数据
Concat:
pd.concat([df1,df2],axis=0)#将df1和df2纵向拼接
pd.concat([df1,df2],axis=1)#将df1和df2横向拼接(index对不上的会用NaN填充)
Append:
df1.append(s,ignore_index=False)#s为Series,ignore_index=False表示索引不变,若为True,则索引变为range
Duplicated:
z.duplicated()#查看重复数据
z.drop_duplicates()#删除重复数据
全局变量
第一种:
是在一个单独的模块中定义好,然后在需要使用的全局模块中将定义的全局变量模块导入。
SOLR_URL='http:
//solr.org'
deftt():
globalSOLR_URL
SOLR_URL=SOLR_URL+'#aa'
if__name__=='__main__':
tt()
printSOLR_URL
#输出:
http:
//solr.org#aa
第二种:
直接在当前的模块中定义好,然后直接在本模块中通过global声明,然后使用。
global_list.py
GLOBAL_A='hello'
GLOBAL_B='world'
test.py
复制代码
importglobal_list
deftt():
printglobal_list.GLOBAL_A
if__name__=='__main__':
tt()
#输出:
hello
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 的更多的方法 更多 方法