python数据结构_7

一、前言

因个人习惯,在阅读和学习文字资料时,习惯摘写笔记,因此在这里留下自己的学习记录。笔记的内容偏摘抄为主,并非自己的原创内容。

内容基于:《简明 Python 教程》Swaroop, C. H. 著沈洁元  译

二、对象与类简介

例如:为一个变量赋值5,可以认为创建了一个型为int的对象

类有方法(行为),仅为类定义的函数(该类函数只有该类的对象能使用)

类有域(属性),仅为类定义的变量/名称(该类域只有该类的对象能使用)

调用方法与JAVA类似,都是   对象名.  的形式。

三、数据结构

定义:可以处理一些数据的结构,也可以是用来存储一组相关数据的结构。

(1)内建的数据结构

1、列表(list):处理一组有序项目的数据结构。(等同于JAVA中的数组,List\ArrayList),是可变的数据类型。(中括号定义【】)

允许添加、删除,所以是可变的数据类型,改变的是自身,而不是新建对象。(append()添加、del  XXX[index]删除、sort()排序、insert(index,value)指定位置插入、pop()末尾删除,可指定index删除),例:shoplist = ['apple',1,'banana']        pop()函数用于删除列表的一个元素(默认队尾),并返回该元素,。

2、元组(tuple):元组和列表十分类似,只不过元组和字符串一样是 不可变的, 即你不能修改元组(被使用时值不变,以便采用一组安全的值,类似java中的array)。(圆括号定义()),远组中的元素可以是任何对象,例:zoo =('cat','dog','mouse')  new_zoo =('1','2',zoo)   new_zoo[2][2]指new_zoo中第三个对象zoo中的第三个1元素。(replace()替换、remove()删除)

注意:上面说的不可变,是指指向的内存地址比边,单加入元素指向的是一个可变的类型,例如list,那list中的元素是可变的。

注意:空元组由()组成,只有一个元素的元组,元素后面需有“,”,不然会与带圆括号的对象冲突,即需要位(1,)。

占位符定制打印语句:

(1)通过%前缀来定制

age = 22

name = 'chllenge'

print ("%s is %d years old"%(name,age))  则  %s即name%d即age,但是后面元组中的元素顺序须臾你的指定顺序一致。(这样写的好处是避免了过多的使用标点符号)

print ("name is %s"%name)    这种后面不用()括起来的数据源只有在字符串中仅有一个定制符%才生效。

占位符类型:%d(整数)     %f(浮点数)   %s(字符串)  %x(十六进制整数)

2)通过{index}配合.format()来定制

{index}中的index与format('xxx',xxx)中的参数顺序一致,{}默认等价于{0},例,{1:.1f}即保留1位小数,浮点数类型的(f)前加上  .N      n为要保留的位数   ,如  .1f 、.2f

3、字典(dict)(类似java中的map,键值对的结构)

即该数据构是由键(key)值(value)构成,值必须通过键寻找,键必须唯一,是无序的数据结构。

键:只能使用不可变的对象最为字典的键(例如:字符串)

值:可以使用可变、不可变的对象作为字典的值。

例子:  d ={key1:value1,key2:value2}      键与值":"分隔(key:value为一个键值对)   键值对间用“,”分割    这些键值对通过“{}”花括号包裹。

若要使用特定顺序的字典,在使用前需先对他们进行排序。

获取指定简直对的方式:字典名【键名】

为字典添加指定键值对:字典名【新key】= 值     即可

为字典删除指定键值对:del 字典名【要删除的值的key】

判断字典是否包含指定key:   if 指定的key  in  字典名     或者   dict类的has_key方法

返回字典键值对的无序序列:字典名.items()    返回一个元组的列表,每个元素就是一个元组,每个元组就是一个键值对,即包含两个元素,分别为键值对的key和值。

(1)例子:

for name,address in ab.items()      

print ("name is %s and address is %s"%(name,address))

(2)例子:

for item in ab.items()       

print ("name is %s and address is %s"%item)

两例子的结果过是一致的。

4、不重复的元组

与元组类似,但其包含的元素会过滤掉重复的元素

四、序列

上面描述的列表、元组、字典都是序列,序列的特点在于索引操作符切片操作符

索引操作符:我们可以通过索引操作符从序列中抓取特定的项目;

切片操作符:我们可以通过索引操作符从序列中获取指定的切片(即部分序列);

(1)索引操作符(下标操作,类JAVA中的index):

(下标为正数)list[index]  正向获取序列的对应下标的值;(0开始)

(下标为负)list[index]  反向获取序列的对应下标的值;(-1开始)

下标的正负数,指明是从头到尾数还是从尾到头数。

注意:索引操作的原序列。

(2)切片操作符(范围截取操作,类JAVA中的subString,功能更强大)

特点:【】中是一对可选数字,数字可选,但两数字一定是用“:”(冒号)分隔的,冒号必须有,数字可以没有(例:list[:]即返回整个序列)。

第一个数表示切片开始的位置,不设置则默认为序列首位;(允许负数)

第二个数表示切片结束的位置,不设置则默认为序列尾。(允许负数)

注意:

切片的序列在开始位置开始,在结束位置前结束(即不包括结束为止,等同数学的不闭包)。

切片返回的是一个新序列。

五、对象的绑定

在Java中,我们使用对象时,会有值传递(传递的是值,操作的是不同对象)和引用传递(传递的是对象的引用地址,操作的是同一个对象)的区分。(概述的比较模糊,大概理解即可)

变量名指向计算机中存储对象的内存,称为名称到对象的绑定

六、更多字符串内容(字符出的类是str)

字符串也是对象,同样具有类(str)方法。(该类方法可以实现一些特定的字符串操作)

部分字符串函数:name = "abcdefg"

(1)startswith():类似java,判断字符串的开头是否与指定字符串一致;name .startswith("abc")   布尔值

(2)char in str:字符串是否包含某字符;例: if 'a' in name   布尔值

(3)find():字符串是否包含指定字符串;例: name.find(“abc”)   int     不等于-1则包含。

(4)join(序列对象):将字符串作为序列元素的间隔符,返沪大字符串(序列字符串输出,类JAVA的toString());

例:devide = '_a_'      print (devide.join(List))

七、序列、字符串间的转换

(1)序列转字符串:通过str(序列)函数;

(2)字典可转元组(tuple(字典))、转列表(list(字典)

(3)列表可赚元组tuple(列表),注意:元组不能转字典

(4)字符转拥有对应数据类型的结构,则可转字典(dict(eval(字符串)))、转元组(tuple(eval(字符串)))、转列表(list(eval(字符串))

(5)字符串转数字,int(str)、float(str)

(6)变量转布尔值,bool(变量)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值