Python学习日记:数据结构——容器类型

Hello NanFeng

容器类型

之前总结过了数值类型,本来想先写字符串的,但是最近看了看其他大佬的资料和以前的笔记,觉得还是有必要先做个大体的总结。

什么是容器类型?

容器,顾名思义,是用来承装其他物品的东西,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(),对数值类型求和,还有很多多只要是数值类型就能够使用的函数,这里就不一一枚举了。

大小比较:容器类型的大小比较只能同类型比较。

  1. 字符串:从第一个字符开始,一样就比后一个字符,也是比较字符对应的ASCII码的码值大小,如果一个字符串的内容是另一个字符串的前面部分,那么长的这个字符串更大
  2. 列表和元组:都是从第一个元素开始比较,但要注意对应比较的元素要类型一致。
  3. 字典:字典不可以比较
  4. 集合:集合的 > <是判断包含关系,具体理解可以参考数学里的集合

写了挺久的容器这两个字,让我想到之前捣鼓Linux时涉及到的docker容器,不过两个容器的概念还是有很大区别的啦,以后总结Linux时再深入写,收~

Hello NanFeng

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>