上篇学习python的基本数据类型,这篇学习python的容器数据类型,容器数据类型分为5种
容器数据类型
- 列表`<class 'list'>`
- 元组`<class 'tuple'>`
- 字典`<class 'dict'>`
- 集合`<class 'set'>`
- 字符串`<class 'str'>`
一、 列表
定义: [a,b,c] 中括号括起来,用,隔开
特点: 由于list的元素可以是任何对象,不是同一种类型,因此列表中所保存的是对象的指针。即指向对象地址的指针,即使保存一个简单的`[1,2,3]`,也有3个指针和3个整数对象.通过指针便可定位到对象操作:
- 追加
- append()方法: list.append('a') 在末尾添加元素,只能一个一个的添加元素,可以是任意数据类型,并且存进入保持原类型
- extend()方法: list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- 插入
- list.insert(index,obj) 在编号index 位置插入obj
- 删除
- list.remove(obj) 移除列表中某个值的第一个匹配项 (需要一一比对,直到对应上,但是后续的不会去匹配,应该需要用到for循环,可能会出现越界问题?)
- list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 可以指定index
- del x[0:2] 删除0到2的元素,del可以删除指定的一个对象或者多个对象
- remove和pop的区别,一个是删除元素一个删除指定索引的值
- 查询
- x[index] 获取指定index的元素,index从0开始,想获取最后一个index=-1 倒数第二个 index=-2 这个样子
- 特殊写法 切片: 通用写法是
start : stop : step 注意 ":"
- 情况 1 - "start :"
- 以
step
为 1 (默认) 从编号start
往列表尾部切片 x[1:] => 从1开始向尾部切片 一次1个- 情况 2 - ": stop"
- 以
step
为 1 (默认) 从列表头部往编号stop
切片 x[:1] => 从1开始像头部切片 一次1个- 情况 3 - "start : stop"
- 以
step
为 1 (默认) 从编号start
往编号stop
切片 x[1:2] => 从1开始往2切片 一次1个- 情况 4 - "start : stop : step"
- 以具体的
step
从编号start
往编号stop
切片。注意最后把step
设为 -1,相当于将列表反向排列- 情况 5 - " : "
- 复制列表中的所有元素(浅拷贝)
如:
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x, type(x))
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] <class 'list'>
x = [2, 3, 4, 5, 6, 7]
print(x, type(x))
# [2, 3, 4, 5, 6, 7] <class 'list'>
列表常用操作符:
- 等号操作符:
== 判断是否同一个列表
- 连接操作符
+ 相当于extend()方法
- 重复操作符
* 重复操作符,*n 重复n次
- 成员关系操作符
in
、not in 判断是否属于
二、元组
需要注意的是:
- 元组可以使用()来创建,也可以不使用,但是为了规范性,还是使用()为好
- 当元组只有一个元素时候,必须加上, 否则会被当成运算符处理
- 元组有一维和二维,用下标来表示,也就是索引
- 对于元组,操作是不可更改的,但是当其内部含有指向时,指向的元素可以被更改
内置方法:
因为不可更改所以内置方法有两个
- count() 统计元素出现的次数
- index() 返回指定元素出现的索引只
解压操作:
定义: 用指定的值去接收对应数量的元组,其中对于不想具体接收,或者根本不需要的可以分别使用 *变量 或者 *_去替代
如:
t=1,2,3,4,5;
a,b,*rest = t
# 此时, a=1,b=2 rest=[3,4,5]
a,b*_ = t
# 此时, a=1,b=2 剩余被*_所替代
三、字符串
定义:
- ' ' 或者 " "来定义
- 对于 符号 如 使用]来转义 如: \\ 表示反斜杠 \' 表示单引号 \" 表示双引号 \n 表示换行 等
- 如果想输出原始的字符,即使有转义也会原模原样的输出,前面+ r
- """ 同注意一样,可以多行输出字符串
内置方法
多数同Java,暂略
字符串的格式化
str.format()
str ="{0} is {1}".format('She','Lovely'); # 根据位置去匹配,从零开始
str ="{a} is {b}".format(a='She',b='Lovely'); # 根据参数匹配
str ="{0} is {b}".format('She',b='Lovely'); # 根据参数和位置混合匹配,位置必须在前
str ="{0:.2f} {1}".format(27.68,'GB'); # 根据参数匹配,同时格式化
# 对于格式化有多种形式 基本样式 '%d' %参数 可以后续深入了解
四、 字典
定义: 一组无需的键值对(key:value)的集合 {元素1,元素2,元素3} 每一个元素都可以是键值对
特点:
- key值不重复,且无序
- 一个key值对应一个value值,如果 添加元素时,已存在key值,后来的元素将会用value值覆盖之前的值
- 通过key值可以定位到value值,如果key值不存在则报错 keyError
- 使用dict() 来创建一个空的字典
内置方法
- dict.fromkeys(seq) 以sql为key 其中value为初始值 返回 对应值
- dict.keys() 返回key的迭代 可以使用list()方法转为列表及遍历
- dict.values() 返回values的迭代,同样可以使用list()转为列表及遍历
- dict.items() 返回其中的所有 key:value 的键值对
- dict.get() 获取指定的key,如果不存在则返回默认值
- dict.setdefault() 同get 但是其中的key:value 如果不存在则返回value
- dict.pop() 删除key对应的value值,并返回value值,如果不存在则返回默认value # del dict[key] 删除对应key的value 但是不返回
- dict. popitem() 随机返回并删除一名幸运的键值对,如果不存在,则报错KeyError
- dict.clear() 清空
- dict,copy() 浅复制
五、 set 集合
set与dict不同
形式定义 | 特点 | |
set | 单独的元素 | 元素不重复且无序 |
dict | 键值对key:value | key值不重复且无序 |
集合的创建
- 集合可以{..元素} 来创建
- 但是当集合元素为空的时候,不能使用{} 这样会被当成dict 应该使用 t=set()
- 因为set的特殊性,set可以用来去重等多种操作
集合的内置方法:
- add() 添加元素,重复则不进行操作
- update() 修改集合,相当于复制+去重
- remove() 删除指定元素
- discard() 移除指定的集合元素
- pop() 随机挑选一个元素,进行删除操作
六、 总结
至此,python的Task2 学习到此结束,因为时间问题,断断续续的学习,没有仔细去了解,详细的内容,作为一个大纲了解,后续再进行,详细的学习.
总体上Task 学习的是对一组元素之间的操作,和容器的介绍. 这里只是一个大概的概念,详细的操作,像set的去重等,在算法上都可以用的上,需要灵活变通
其中,的各种内置方法也许要在使用的过程中,去加深印象,单独记忆不去实操使用,比较枯燥,目前就这样了. over