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

python学习(2)基础数据结构

2018-01-29 14:27 731 查看
 1. tuple元组:

 元组是长度固定,不可改变的序列。创建元组的方法是逗号;

如果想要创建一个更复杂的元组的话吗,还是要用括号,括号之间需要用逗号;

 tuple()可以把其他序列或者迭代器转换为序列,存放在元组中的object本身无法修改,但是如果tuple内部的object是可以更改的

那么可以对其进行修改。

tuple用+来合并多个元组

取出元组中元素的方法有多种,其中一种如下图所示:



 一种元组方法,可以用来计算某个值出现的次数,list中也有这个方法,



2. List列表

list的内容和大小都可以变;
 list函数通常用来局限化迭代器或者生成器,如下图所示:



list添加和移除元素的常用
4000
语法:append insert pop remove、
 append: a_list.append("foo")

insert: 将元素插入到指定的位置



  pop: 移除序列中特定位置的元素,若不指定位置,默认移除最后一个元素



remove: 通过值移除指定的element,如果同一个值在序列号总多次出现,只移除第一个



检查一个值是否在list中,用in:



合并list:
 (1)用+号

(2)通过extend方法,可以添加多个元素
注意:用+做合并是一个运算量较大的操作,因为要创建一个新的list并复制。如果操作的是一个很大的list。用extend会
更好一些
 append和extend的区别:append是把元素添加到一个list里,extend是把两个list结合在一起
 extend和+的区别:+是创建了一个新的list并返回,运算量大;extend是在原来的list上面作了修改,运算量小
排序:
用sort函数。sort函数有一些比较方便的选项。比如设置一个sort key,这个key也是一个函数,比如我们想要按string的长度来排序
 


二分搜索和维持一个排好序的list
 内建的bisect模块可以实现二分搜索。bisect.bisect是用来寻找插入的位置,而bisect.insert则实际插入元素到指定的位置:
 注意,bisect不会检查list是否是排好序的,所以用这个模块之前要把list排序
 


切片:
 [start:stop] 输出的结果包含开头,不包含结尾。所以输出的结果的数量是stop-start,。切片可以用来输出,也可以用来修改list中的某些值
 在切片的使用中,可以不用写开头或者结尾



负索引表示倒数开始多少个的意思
 


 两个冒号后面的数代表步长,就是隔几个元素取一次:
 


 用-1能够反转一个list或者tuple:
 


内建的序列函数:
 enumerate(枚举),能够返回一个(i,value)的tuple,通常用来把一个list中的位置和值映射到一个dict字典中





 sorted:该函数返回一个新的排好序的序列,而之前提到的.sort方法是直接更改原有的序列,不产生新的序列。

zip:用于pairs(成对)。把多个序列中对应的元素变成一对,最后返回一个含有tuple的list,zip可以接受任意长度的序列,最后返回的结果
取决于最短的序列。zip的一个常见用法是同时迭代多个序列,可以和enumerate搭配起来使用:



如果给我们一个压缩过的序列,我们可以将其解压:



reversed:可以倒叙迭代序列



4. dict 字典
字典创建方法是用{},dict可以像list一样插入:



可以检查dict是否有某个key:



可以使用del或者pop删除值(注意:del和pop都是对key操作)



直接使用keys和values方法能返回dict中key-value组合的迭代器,不过并不按照什么顺序。并且直接使用如果print出来之后会得到如下形式,
需要使用list具现化:



可以使用update来合并两个dict,使用这种方法更改了原有的dict,不会产生新的dict:



如果dict中某个key存在的话,就返回该value,否则的话,九返回一个默认值:



dict中的get和pop方法能够设置默认值,即能把上面的代码简写为:



另外一种常见用法:



而setdefault方法是专门为这个用途存在的,上面的循环可以写成:
使用setdefault()初始化字典键值,使用字典的时候经常会遇到这样一种应用场景:动态更新字典,如果key不在dictionary中那么就添加它
并把它对应的值初始化为空列表[],然后把元素append到空列表中



有效的key类型:
通常的key类型是不可更改的敞亮类型(int, float, string)或者tuple。可以查看一个object是否是hashable,只要是hashable,就可以当做
dict中的key。
5. Set集合
set是无序且元素不重复的。就像key唯一,且没有value的字典,两种方式可以创建,一个是用set函数,一个是用花括号:
,但是创建空set只能使用set(),因为{}是创建一个空字典。
set支持并集、交集和差集
并集表示方式:set1.union(set2)或者set1 | set2
交集表示方式:set1.intersection(set2)或者set1 & set2
注意:set的元素必须是不可更改的,如果想要list一样的元素,只能变为tuple
查看集合的关系:子集和父集:



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