继续前面文章的内容,这篇文章整理列表,字典,元组,集合的学习笔记并做一些练习
2.4列表
列表右两种定义办法:一种是直接方括号写入元素,另一种是使用list()函数。列表中的元素可以是python中的任意对象,整数,浮点数,字符串,列表,元组,字典,都可以
列表也是一种序列,列表中的元素也是可以重复的
索引和切片的规则,序列都是通用的,所以和字符串是一样的。
与字符串不同的地方在于,列表支持这种修改方式,但字符串不可以。
列表是一种有序,可变的序列,容器
字符串的加法,乘法,in操作也完全适用于列表。
列表的方法,同样使用DIR函数。
如何给列表添加元素?
append() insert()
这里可以看到append函数将新增加的元素添加到列表的末尾,而insert函数将新增加元素添加到索引对象之前。
函数extend()
从help的描述可以看出,extend函数添加的是一个可迭代的对象,列表是一个可迭代的对象,这里新建了一个列表lst2并将这个列表添加到了lst里面。
再来看下删除的操作pop和remove
可以看出pop会删除指定的索引,如果没有填写该索引默认是-1,并返回删除的元素
可以看出remove删除指定的元素并且没有返回值。(如果指定元素在列表中有重复,则默认删除第一次出现的该元素
clear()
清空列表中的全部元素lst,clear()
排序
sort,sorted ,reverse,以及之前提到的切片的办法
sorted可以新生成一个排序的列表,不影响之前的列表
对比列表和字符串:都是序列,但列表也是容器类对象。列表是可变序列,字符串不可变。
2.5元组
定义元组有两种办法:
如果创建只有一个元素的的元组需要 添加”,”
元组与列表最大的区别是元组的元素不可以修改,如果一定要修改,先使用list()函数转化成列表,修改好之后再用tuple()函数恢复成元组
元组运行的速度要快于列表;
元组和列表的共同的点是他们都是序列,索引切片这些操作也适用于元组。
2.6字典
关于字典的定义:有三种办法
我这里犯了一个错误,第一个变量命名成立函数dict()的名字,导致dict变成了不是可用的内置函数类型。
这里通过del()语句将第一个变量删除后旧恢复了正常。
第三种办法还是使用dict函数,不过函数的对象是列表,列表的里面的元素是元组
定义中冒号前的对象称为:键(key),冒号后的对象称为:值(value)
字典中的元素是一种映射关系,他们被称为键值对。
字典中的key必须是唯一的,不可变的对象,到目前为止接触的不可变对象有元组,整数,浮点数,字符串。列表作为可变的对象是不能称为字典的key的
提取字典的元素:dic[key ],返回key映射的value
字典不是序列,字典也是一个可变对象。
字典的操作方法:
1)如何判断一个键是不是在字典里?
get()函数
如果这个键在字典里,返回键对应的值,如果不在,则返回后面的值。
setdefault()用法同get一样,不同的是,如果查询的键不在字典里,则会将这个键以及后面的值插入到字典。
2)在字典中增加元素:
update()
如果一个字典里面不包含一个键值对可以直接这样添加:
这里可以看到定义了一个空字典,但是操作之后字典中出现了赋值的键值对。
3)删除操作:
del语句
pop()函数
删除并返回键值对对应的值
popitem()默认删除字典中最后的一个键值对。
字典和列表异同
二者都是容器类对象,字典不是序列,列表是序列。字典和列表都是可变对象
2.7集合
可变集合与不可变集合的定义:
这里可以看出集合的无序性
删除操作:
其中pop()是随机删除集合中的一个元素,而remove是删除指定元素
如果创建不可变集合使用frozenset
copy()
集合作为容器来对象和字典列表用有一个共同的用法就是copy
查看copy的文档发现:return a
shallow
copy of
这里需要理解以下这个shallow
以列表为例shallow copy 浅在值copy了第一层对象,列表中的列表(第二层)没有copy 当被拷贝对象的第二层发生改变了时候,拷贝对象的第二层也会发生改变
如果想使用深copy则需要调用模块:
元素与集合的关系,集合与集合的关系,集合之间的运算
元素与集合的关系:in来判断
元素间的关系:超集:issupperset 子集:issubset
集合间的运算:
∩,∪,-