PYTHON数据容器
- 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以使任意类型的数据
- 数据容器根据特点的不同,分为五类: 列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
list(列表)
特点
- 可以同时容纳不同类型的元素有序存储,允许重复数据存在,可以修改
基本语法
- 
变量名称 = [元素1,元素2,元素3,元素4,元素5...] 
- 
定义空列表: 
- 
元素的数据类型没有任何限制,列表也可以是元素,这样就定义了嵌套列表 
a = ['A',213,'C',[1,2,3]]
for x in a:
    print(x)
    if type(x) is list:
        for y in x :
             print(y)
下标索引
a = ['A',213,'C',[1,2,3]]
# 正序
for x in range(0, len(a)):
    print(a[x])
# 逆序
for x in range(0, len(a)):
    print(a[-x-1])
# 嵌套
for x in range(0, len(a)):
    print(a[x])
    if type(a[x]) is list:
        for y in range(0,len(a[x])):
            print(a[x][y])
相关操作
| 方法 | 作用 | 
| list.index(元素) | 查询下标索引 | 
| list[x] = 值 | 修改特定位置的值 | 
| list.insert(下标,元素) | 插入元素 | 
| list.append(元素) | 追加元素 | 
| list.extend(其他数据容器) | 将其他数据容器中的元素依次追加 | 
| del list[下标] | 删除元素 | 
| list.pop(下标) | 取出下标对应元素,有返回值 | 
| list.remove(元素) | 删除某元素在列表中的第一个匹配项 | 
| list.clear() | 清空列表 | 
| list.count(元素) | 统计某元素在列表中的数量 | 
| len(list) | 统计列表内有多少元素 | 
遍历
a = [21,25,21,23,22,20]
b = 0
while(b<len(a)):
    print(a[b])
    b+=1
    
for x in a:
    print(x)
tuple(元组)
特点
- 可以同时容纳不同类型的元素,有序存储,允许重复数据存在,不可修改
基本语法
- 变量名称 = (元素1,元素2,元素3,元素4,元素5...)
- 定义空元组:
相关操作
| 方法 | 作用 | 
| tuple.index(元素) | 查找某元素第一次找到时的下标 | 
| tuple.count(元素) | 统计某个元素在当前元组中出现的次数 | 
| len(tuple) | 统计元组内的元素个数 | 
str(字符串)
相关操作
| 方法 | 作用 | 
| str.index(参数) | 在字符串中查找参数,返回起始参数位置 | 
| str.replace(字符串1,字符串2) | 将字符串中的字符串1替换为字符串2返回(不是修改字符串本身,而是得到新字符串) | 
| str.split(分隔符字符串) | 按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中 | 
| str.strip()/str.strip(参数) | 去掉字符串前后的空格;有参数则去掉字符串前后的参数内容 | 
| str.count(参数) | 返回参数在字符串中出现的次数 | 
| len(str) | 返回字符串长度 | 
序列的切片操作
- 序列: 是指内容连续、有序,可使用下标索引的一类数据容器
- 列表、元组、字符串,均可以视为序列
- 切片: 从一个序列中取出一个子序列
语法
- 序列[起始下标:结束下标:步长]
- 注意事项:
- 取头不取尾
- 起始下标留空表示从头开始
- 结束下标留空表示截取到结尾
- 步长为负表示反向取(起始下标和结束下标也要反向标记)
 
set(集合)
特点
- 列表可修改、不允许数据重复、内容无序
- 因为集合是无序的,所以集合不支持下标索引访问
基本语法
相关操作
| 方法 | 作用 | 
| set.add(元素) | 添加元素 | 
| set.remove(元素) | 移除元素 | 
| set.pop() | 随机取出一个元素 | 
| set.clear() | 清空集合 | 
| set1.difference(set2) | 返回2个集合的差集(集合1有而集合2没有的) | 
| set1.difference_update(set2) | 消除2个集合的差集(在集合1中删除和集合2相同的元素) | 
| set1.union(set2) | 将2个集合合并为1个,产生新集合 | 
| len(set) | 返回集合元素个数 | 
遍历
- 因为集合不支持下标索引,所以不能使用while循环遍历
dict(字典、映射)
特点
- 可以同时容纳不同类型的元素,key不允许重复,不可用下标索引,可以修改
基本语法
字典的嵌套
- 字典的key和value可以使任意数据类型(key不可为字典)
a={
    "王力宏":{
        "语文":99,
        "数学":98,
        "英语":97,
    },
    "林俊杰":{
        "语文":87,
        "数学":86,
        "英语":85,
    },
    "周杰伦":{
        "语文":73,
        "数学":72,
        "英语":71,
    }
}
print(a["王力宏"]["语文"])
相关操作
| 方法 | 作用 | 
| dict[key]=value | key不存在,则新增元素;key存在,更新元素 | 
| dict.pop(key) | 获得指定key的value,在dict中删除该key | 
| dict.clear() | 清空元素 | 
| dict.keys() | 得到字典中的全部key | 
| len(dict) | 获取字段中的元素数量 | 
遍历字典
a={
    "王力宏":{
        "语文":99,
        "数学":98,
        "英语":97,
    },
    "林俊杰":{
        "语文":87,
        "数学":86,
        "英语":85,
    },
    "周杰伦":{
        "语文":73,
        "数学":72,
        "英语":71,
    }
}
# x是key
for x in a:
    print(x,a[x])
# 练习
# 通过for循环对所有级别为1级的员工,级别上升1级,薪水增加1000元
a={
    "王力宏":{
        "部门":"科技",
        "工资":3000,
        "级别":1
    },
    "周杰伦":{
        "部门":"市场部",
        "工资":5000,
        "级别":2
    },
    "林俊杰":{
        "部门":"市场",
        "工资":7000,
        "级别":3
    },
    "张学友":{
        "部门":"科技",
        "工资":4000,
        "级别":1
    },
    "刘德华":{
        "部门":"市场",
        "工资":6000,
        "级别":2
    }
}
print(a)
for x in a:
    if(a[x]["级别"]==1):
        a[x]["级别"] += 1
        a[x]["工资"] += 1000
print(a)
总结
|  | 列表list | 元组tuple | 字符串str | 集合set | 字典dict | 
| 元素类型 | 任意 | 任意 | 字符 | 任意 | 任意(key的类型不能为字典) | 
| 下标索引 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 
| 重复元素 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 
| 是否可改 | 是 | 否 | 否 | 是 | 是 | 
| 是否有序 | 是 | 是 | 是 | 否 | 否 | 
通用操作
| 方法 | 作用 | 
| len(容器) | 统计容器的元素个数 | 
| max(容器) | 统计容器的最大元素 | 
| min(容器) | 统计容器的最小元素 | 
| 目标容器类型(容器) | 转换容器 | 
| sorted(容器,[reverse=True]) (reverse默认为False,逆序则设为True) | 排序,返回列表对象 |