(7)python数据结构

一、前言

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

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

二、对象与类简介

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

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

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

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

三、数据结构

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

(1)内建的数据结构

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

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

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

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

定制打印语句:(通过%%来定制)

age = 22

name = 'chllenge'

print ("%s is %d years old"%(name,age))  则  %s即name%d即age,前面的替代符(%a,%d)中的a、d是对应数据类型的,但是后面元组中的元素顺序须臾你的指定顺序一致。(避免了过多的使用标点符号)

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

3、字典(类似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)

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

四、序列

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

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

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

(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))

猜你喜欢

转载自blog.csdn.net/chen_courage/article/details/81036345