您的位置:首页 > 理论基础 > 数据结构算法

【python入门笔记】(三)基本数据结构

2017-12-13 17:14 113 查看

基本数据结构

主要内容

字符串

列表list

元组tuple

字典dictionary

集合set

关于可变类型与不可变类型

迭代

一.字符串

字符串拼接

可使用加号“+”拼接字符串,如使用
'abc'+'def'
得到的结果是abcdef



可使用乘号“*”重复字符串,如使用
3*'un'+'abc'
得到的结果是unununabc



字符串的访问



字符串可以通过下标访问,0为字符串开头第一个字符,-1为字符串结尾第一个字符,-2为倒数第二个字符,以此类推



字符串的切片

冒号‘’:‘’用于字符串的切片,且区间为左闭右开,如[:2]表示字符串第1和第二个字符,[4:]表示从字符串的第五个字符到最后一个字符



字符串的长度

使用len(字符串)

字符串的方法

startswith

startwith方法是用来测试字符串是否以给定字符串开始,返回布尔值



in

in操作符用来检验一个给定字符串是否为另一个字符串的一部分。返回布尔值。



find

find方法用来找出给定字符串在另一个字符串中的位置,返回-1则表示找不到子字符串。



二.列表list

list与数组相似,可以使用下标访问;与字符串相似,可以切片,可以使用加法连接两个list,可以使用乘法重复list中的值;可以使用len返回list的长度。



对列表的操作

追加元素到末尾

append()方法添加



使用+号



插入元素至指定位置

insert(索引号,值)方法插入



删除列表末尾的元素

pop()方法



删除指定位置的元素

pop(索引位置)



列表的元素也可以是列表



可以看作二维数组,同理还有三维四维等等。

列表推导

一种生成新列表的方式,



三.元组tuple

元组与列表比较相似,但元组一经初始化就没办法修改,没有append,insert等方法。

构造空列表使用()

构造单元素列表用(a,)

如果元组内含有可变的元素比如列表,那可以修改列表中的值



元组所谓的不变是指tuple中的元素的指向永远不变,但指向的list本身是可变的

元组可以作为左值



可以如下交换元组内元素的值



四.字典dictionary

字典类似C++中的map,使用“键-值”对储存,具有极快的查找速度,但是以空间换时间的一种方式,对内存消耗大;字典不像元组列表一样能通过下标访问。在字典中,只有不可变对象可作为键使用!(如:字符串,整数,元组,但要注意元组不能含有可变元素)



要注意的是,一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉。

(字典添加元素)



可以用in来判断键是否存在,并可以通过get(key)得到键所对应的值,使用pop(key)可以删除键并清除对应的值



定义字典:
x={'aa':123,'abc':2,(1,2,3):4,'def':2}


删除操作也可以使用del



字典还可以由二元列表初始化,



当字典键为字符串时,可以使用关键字参数设定,



字典推导(一种创建新字典的方式)



五.集合set

集合是无序无重复的数据结构,支持添加删除等操作,支持交并差等集合操作,同样支持集合推导

空集合用set()



集合初始化用{}括住逗号分隔



添加元素,add()



集合里的值也需要是不可变值



集合修改数据只能先删除后添加



集合的逻辑运算



集合推导



六.关于可变类型与不可变类型

可变数据类型:列表与字典

不可变数据类型:整型int、浮点型float、字符串型string和元组

区别:python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份(即可变类型占用了更多的内存)。

七.迭代

Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:



集合的迭代:



列表的迭代:



字符串的迭代:



判断一个对象是否可以迭代

引入collections模块的Iterable类型判断:



在list中实现同时迭代索引和元素本身

(使用enumerate函数可以把一个list变成索引-元素对)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: