之前总结过了数值类型,本来想先写字符串的,但是最近看了看其他大佬的资料和以前的笔记,觉得还是有必要先做个大体的总结。
什么是容器类型?容器,顾名思义,是用来承装其他物品的东西,python的容器类型的功能也因此得名。在python中,容器类型可以包含其他对象(对于特定的容器类型不是所有的对象都可以被包含进去)。在六大数据类型中,除了之前写过的数值类型,剩下5种全是容器类型。
其中,有序的容器被称为序列(sequence),无序的容器有映射(mapping)和集合。
所以容器大体分类可以如下:
序列分为三种:列表(list)、字符串(string)和元组(tuple)
序列都存在以下共同特性:
1.存在索引(index)
从第一个到最后一个元素都有对应的索引值。假如一个序列存在n个元素,当使用顺序索引的时候,索引的范围是[0,n-1],当使用倒序索引的时候,索引的范围是[-n,-1]。
list1 = [1, 2, 3] print(list1.index(1), list1.index(2), list1.index(3)) # 输出 0 1 2
可以通过序列的index()方法获取某个元素的下标,当序列中有重复元素时,默认获取第一个出现的元素的下标。
2.可以使用切片(slice)
切片是指通过索引来获取序列部分元素的方法,该操作会生成新的序列。
语法:sequence[start : end : step]
start指定索引区间上界,end指定索引区间下界。step指定切片步数(每多少个元素取一次),不写的话默认为1。需要注意的是索引区间是左闭右开的区间,以下具体用法:
list1 = [1, 2, 3, 4, 5] list2 = list1[0:5] print(list2) list3 = list1[-3:-1] print(list3) list4 = list1[0:5:2] print(list4) # 输出 [1, 2, 3, 4, 5] [3, 4] [1, 3, 5]
比较特殊的是列表,因为列表是可变数据类型,所以在三个序列中,只有列表才可以进行切片赋值操作。通过指定索引来修改想要的元素,且不生成新的序列。
list1 = [1, 2, 3, 4, 5] print(id(list1)) list1[0] = 6 print(list1, id(list1)) list1[0:3] = [6] print(list1, id(list1)) # 输出 2001093237320 [6, 2, 3, 4, 5] 2001093237320 [6, 4, 5] 2001093237320
3.可以进行重复操作
重复操作的符号是 *
str1 = "hello" print(str1*2) list1 = [1, 2, 3] print(list1*2) tuple1 = (4, 5, 6) print(tuple1*2) # 输出 hellohello [1, 2, 3, 1, 2, 3] (4, 5, 6, 4, 5, 6)
把重复操作的序列赋值给变量后会生成新的序列
4.可以进行拼接操作
拼接操作的符号是 +
str1 = "hello" str2 = "nanfeng" str3 = str1 + "_" + str2 print(str3) # 输出 hello_nanfeng映射
python内的映射类型只有一种,便是字典。字典通过键值对来存储数据,是一种键值映射关系通过key其值来获取对应的value值。
字典是可变的、无序的以及天生去重的(关于字典的内容后面介绍字典再详细写)。
集合集合可以理解为没有value的字典,也具有可变的、无序的以及天生去重的性质。
容器的一些共性1.访问值
之前有写到序列可以通过索引访问值,字典和集合也有类似的形式
dict1 = {"1": 2, "2": 3}
print(dict1["1"])
# 输出
2
但中括号里的i不是索引值,而是具体的key值
同样,可变类型都可以通过这种方式来改变元素。字典和集合都是可变类型数据。
2.可迭代性
所有的容器类型都是可迭代对象,都可以用于for i in的循环里,关于可迭代对象以后深入写。
3.成员关系判断
两种成员运算符 in 与 not in ,返回的是布尔值,真为True,假为False
list1 = [1, 2, 5, 6] print(1 in list1) print(3 in list1) print(3 not in list1) # 输出 2 True False True
4.统计类函数
计算长度:len()方法,获取容器类元素的个数,字典只统计key的个数
寻找极值:max()和min(),获取最大值和最小值。如果是数值类型比较大小,如果是字符类型比较对应字符在ASCII码表里的位置,越后的越大(码值越大)
求和:sum(),对数值类型求和,还有很多多只要是数值类型就能够使用的函数,这里就不一一枚举了。
大小比较:容器类型的大小比较只能同类型比较。
字符串:从第一个字符开始,一样就比后一个字符,也是比较字符对应的ASCII码的码值大小,如果一个字符串的内容是另一个字符串的前面部分,那么长的这个字符串更大列表和元组:都是从第一个元素开始比较,但要注意对应比较的元素要类型一致。字典:字典不可以比较集合:集合的 > <是判断包含关系,具体理解可以参考数学里的集合
写了挺久的容器这两个字,让我想到之前捣鼓Linux时涉及到的docker容器,不过两个容器的概念还是有很大区别的啦,以后总结Linux时再深入写,收~
Hello NanFeng


