列表和分组
序列概览:
数据结构是通过某种方式组织在一起的数据元素的集合。这些元素可以是数字、字符,甚至可以是其他数据结构。
在python中,最基本的数据结构是序列(sequence)。
序列中的每一个元素被分配一个序号----即元素的位置,也称为索引、下标。第一个索引是0,第二个索引是1,以此类推。
Python包含6种内建的序列,此次重点讨论最常用的两种类型:列表、元祖。其他内建序列类型包括:字符串、Unicode字符串、buffer对象和xrange对象。接下来讲解对所有序列都通用的操作。
列表和元祖的创建:
列表和元祖主要的区别在于:列表可以修改,而元祖不可修改。也就是说如果需要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改时,使用元祖则更为合适。
创建一个列表,只要把逗号分隔的不同数据项使用方括号括起来即可;
创建一个元祖,只要把逗号隔开的不同数据项使用小括号括起来即可,如果元组里只有一个元素的话,那么你必须在这个元素后面加一个逗号,否则它不是元组。
通用序列操作:
所有序列类型都可以进行某种特定的操作。这些操作包括索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格),除此之外,还有计算序列长度、找出最大元素和最小元素的内建函数。
1. 索引
序列中的所有元素都是有编号的:从0开始递增。这些元素可以通过编号分别访问。这些编号就是索引。索引0指向第一个元素。
使用负数索引时,python会从右边,就是最后一个元素开始计数。最后一个元素的位置编号就是-1。
如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如你只对用户输入年份的第4个数字感兴趣:
2.分片
索引访问单个元素,分片可以访问一定范围的元素。分片通过冒号隔开的两个索引来实现。
第一个索引是要提取的第一个元素的编号,第二个索引是分片之后剩余部分的第一个元素的编号;简单来说,就是“顾头不顾尾”。
步长:进行分片的时候,默认步长为1;我们也可以显示设置步长,若步长被设置为大于1的数,则会跳过某些元素。
例如:步长为2的分片包括的是从开始到结束每隔1个的元素
步长不可以为0,会报错;但是可以为负数,此时分片从右往左提取元素。
1、当步长为正数时,开始索引要小于结束索引,否则会取到空
2、当步长为负数时,开始索引要大于结束索引,否则会取到空
3、当步长为负数,开始索引为空时,开始索引默认为最后一个索引+1
4、当步长为负数,结束索引为空时,结束索引默认为0
3.序列相加
通过使用加运算符可以进行序列的连接操作。
只有两种相同类型的序列才能进行连接操作,否则会报错:
4. 乘法
用数字X乘以序列,会生成一个新的序列。在新的序列中,原来的序列将被重复X次。
None、空列表和初始化
空列表可以简单的通过两个中括号来表示([]).
None是一个python内建值,代表“这里什么也没有”
若是想要初始化一个长度为10的列表:
5.成员资格
为了检查一个值是否在序列中,可以使用in运算符。
这个运算符检查某个条件是否为真,然后返回相应的值:条件为真,返回True;条件为假,返回False。
这样的运算符为布尔运算符,返回的值为布尔值。
6. 长度、最小值、最大值
len函数:返回序列中所包含的元素的数量
min函数:返回序列中最小的元素
max函数:返回序列中最大的元素
基本的列表操作
1.改变列表:元素赋值
使用索引标记为某个特定的、位置明确的元素赋值。
注:不能为一个位置不存在的元素进行赋值
如果一个列表长度为5,那么不能为位置为11的的元素赋值。
2.删除元素
Del语句实现删除。
列表方法
1.append
append方法适用于在列表末尾追加新的对象。
在x列表末尾新增一个值为100的对象:
2.count
count方法统计某个元素在列表中出现的次数。
统计x列表中1出现的次数:
3.index
index方法用于从列表中找出某个值第一个匹配项的索引位置。
查找x列表中值为1的元素出现的第一个位置:
查找的元素不存在时:
4.insert
在指定位置插入元素。
在‘北京’后插入‘香港’:
5.pop
移除列表中的一个指定的元素(默认是最后一个)。
移除最后一个元素、移除角标为0的元素:
pop有返回值:
6.remove
移除列表中某个值的第一个匹配项。
删除x列表中值为1的第一个元素:
无返回值,与pop相反。
7.reverse
将列表中的元素反向存放。
无返回值,与pop相反。
8.sort
在原位置对列表进行排序。(字母、汉字都可以排序。)
升序:列表名.sort();降序:列表名.sort(reverse=True)
当需要一个排好序的列表副本,同时需要保留原列表不变时,下面这种做法是错误的,因为sort方法不返回值。
最后得到的是已排序的x和空的y。
正确的做法是先把x赋值给y:
字典:
字典由多个键与其对应的值构成的键-值对组成。键与它的值之间用冒号【:】隔开,项之间用逗号【,】隔开,整个字典由一对大括号括起来【{}】。
字典中的键是唯一的,值不唯一。字典打印输出是无序的。
1.查询
d[k]:返回关联到键k上的值。
访问字典中不存在的键时会报错:
get方法:访问字典中不存在的键时,不会报错,而是得到了None。还可以自己定义“默认”值,替换None。
2.增加
d[k]=v:将值v关联到键k上。
如果键k不存在的话,新增一个键k及相应的值;
如果键k存在的话,覆盖原有的值。
Setdefault方法:类似get方法,能获得与给定键相关联的值,还能在字典中不含有给定键的情况下设定相应的键值。
当键存在时,返回与其对应的值,不改变字典;
当键不存在时,更新字典。
3.删除
del d[k] :删除键为k的项。
Pop方法:获得对应于给定键的值,然后将这个键-值对从字典中移除。
4.清空字典
clear方法:清除字典中所有的项,无返回值(或者说返回None)。
5.获取字典内容
print(d.values()) :打印所有值
print(d.keys()) :打印所有键
print(d.items()) :打印所有键和对应的值
打印嵌套字典:print(第一个字典名[‘第二个字典’][‘第三个字典’]...[‘list’])
6.循环
注意:字典元素的顺序通常无序的。
1)直接循环一个字典的话,循环的是字典的key;
如果只需要值,可以使用d.values(),
2)同时获取键及键对应的值:
7.检查d中是否含有键为k的项
print(key in d) / print(key not in d)
字符串
1.strip
返回去除两侧(不包括内部)的空格及换行(\n)的字符串:
input().strip() :去掉输入值的空格
去掉指定的值:
2.count
统计字符串出现的次数:
3.index
找出某个值第一个匹配项的索引位置。
4.find
在字符串中查找子串,返回子串所在位置的最左端的索引。如果没有找到,返回-1。
5.replace
替换字符串,将【day】换成【DAY】:
6.isdigit
判断字符串是否为纯数字
7.startswith
判断是否以某个字符串开头
8.endswith
判断是否以某个字符串结束
9.upper:返回字符串的大写字母版
lower:返回字符串的小写字母版
10.isalpha
判断字符串是否全为字
11.isalnum
判断是否包含字母和数字,只要有字母或数字就返回True