一、列表类型

列表在运维开发中,主要负责大批量数据的存储!!!

比如存储所有学生信息,存储所有的商品信息,存储所有的日志文件信息等等

1、为什么需要列表

思考:有一个人的姓名(TOM)怎么书写存储程序?

答:变量。

思考:如果一个班级100位学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?

答:No,我们使用列表就可以了, 列表一次可以存储多个数据。

在Python中,我们把这种数据类型称之为列表。但是在其他的编程语言中,如Java、Go、C++等语言中被称为数组。

2、列表的定义

1
列表序列名称 = [列表中的元素1, 列表中的元素2, 列表中的元素3, ...]

案例演示:定义一个列表,用于保存苹果、香蕉以及菠萝

1
2
3
4
5
list1 = ['apple', 'banana', 'pineapple']
# list列表类型支持直接打印
print(list1)
# 打印列表的数据类型
print(type(list1)) # <class 'list'>

注意:列表可以一次存储多个数据且可以为不同的数据类型

3、列表的相关操作

列表的作用是一次性存储多个数据,程序员可以对这些数据进行的操作有:

增、删、改、查。

☆ 查操作

列表在计算机中的底层存储形式,列表和字符串一样,在计算机内存中都占用一段连续的内存地址,我们向访问列表中的每个元素,都可以通过 “索引下标” 的方式进行获取。

img

如果我们想获取列表中的某个元素,非常简单,直接使用索引下标:

1
2
3
list1 = ['apple', 'banana', 'pineapple']
# 获取列表中的banana
print(list1[1])

查操作的相关方法:

编号 函数 作用
1 len() 返回列表中元素的个数
2 in 判断指定数据在某个列表序列,如果在返回True,否则返回False

举个栗子:

1
2
3
4
5
6
7
8
9
10
# 1、返回列表中元素的个数
list1 = ['apple', 'banana', 'pineapple']
print(len(list1))

# 2、in方法(黑名单系统)
list2 = ['192.168.1.15', '10.1.1.100', '172.35.46.128']
if '10.1.1.100' in list2:
print('黑名单IP,禁止访问')
else:
print('正常IP,访问站点信息')

☆ 增操作

编号 函数 作用
1 append() 增加指定数据到列表中

☆ append()

append() :在列表的尾部追加元素

1
2
3
4
5
names = ['孙悟空', '唐僧', '猪八戒']
# 在列表的尾部追加一个元素"沙僧"
names.append('沙僧')
# 打印列表
print(names)

注意:列表追加数据的时候,直接在原列表里面追加了指定数据,即修改了原列表,故列表为可变类型数据。

☆ 删操作

编号 函数 作用
1 del 根据索引移除指定列表元素
2 remove() 移除列表中某个数据的第一个匹配项。

☆ remove()方法

作用:删除匹配的元素

1
2
3
fruit = ['apple', 'banana', 'pineapple']
fruit.remove('banana')
print(fruit)

☆ 改操作

编号 函数 作用
1 列表[索引] = 修改后的值 修改列表中的某个元素

☆ 翻转与排序操作

编号 函数 作用
1 reverse() 将数据序列进行倒叙排列(翻转效果)
2 sort() 对列表序列进行排序,也可以添加参数reverse=True实现从大到小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
list1 = ['貂蝉', '大乔', '小乔', '八戒']
# 修改列表中的元素
list1[3] = '周瑜'
print(list1)

list2 = [1, 2, 3, 4, 5, 6]
list2.reverse()
print(list2)

list3 = [10, 50, 20, 30, 1]
list3.sort() # 升序(从小到大)
# 或
# list3.sort(reverse=True) # 降序(从大到小)
print(list3)

小结:

列表.reverse() 作用?列表进行翻转,还可以使用切片实现!

列表.sort()作用?升序排列

4、列表的循环遍历

什么是循环遍历?答:循环遍历就是使用while或for循环对列表中的每个数据进行打印输出。

for循环(个人比较推荐):

1
2
3
list1 = ['貂蝉', '大乔', '小乔']
for i in list1:
print(i)

容器的遍历都可以使用(for)循环结构。

5、随机点名程序开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'''
点名程序
1. 定义一组数据(所有点名人员名单)
2. 引入random模块,用于生成随机数 => 相当于列表的索引下标
3. 根据索引下标抽取用户信息
'''
# 导入模块
import random
# 定义一组数据
students = ['Tom', 'Rose', 'Jennifer', 'Jack']
# 获取一个随机数 => 不能超过students对应的索引下标
# 最小值 = 0;最大值 = len(studnets) - 1;产生一个0 ~ 3之间的随机整数
index = random.randint(0, len(students) - 1)
# 打印点到名字的同学
print(students[index])

二、元组类型

作用:和列表类似,都可以实现大批量数据存储,唯一区分,元组一旦定义完成后,就不能修改与删除了,可以起到保护数据的目的。

1、为什么需要元组

思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做?

答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改。

1
2
num_list = [10, 20, 30]
num_list[0] = 100

那这种情况下,我们想要存储多个数据且数据不允许更改,应该怎么办呢?

答:使用元组,元组可以存储多个数据且元组内的数据是不能修改的。

2、元组的定义

元组特点:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。

基本语法:

1
2
3
4
5
# 多个数据元组
tuple1 = (10, 20, 30)

# 单个数据元组
tuple2 = (10,)

注意:如果定义的元组只有一个数据,那么这个数据后面也要添加逗号,否则数据类型为唯一的这个数据的数据类型。

三、字典类型(重点)

列表类型比较适合大批量数据的存储。

作用?字典类型比较适合某一事物的存储,比如一个人、一本书、一个产品、一个主机信息等等。

我们说的这个事物往往是由多个属性组成,比如一个人(姓名、年龄、家庭住址),一个主机信息(IP、端口、账号、密码)

1、为什么需要字典(dict)

思考1:比如我们要存储一个人的信息,姓名:Tom,年龄:20周岁,性别:男,家庭住址:北京市昌平区,如何快速存储。

1
person = ['Tom', 20, '男', '北京市昌平区']

思考2:在日常生活中,姓名、年龄以及性别同属于一个人的基本特征。但是如果使用列表对其进行存储,则分散为3个独立元素,这显然不合逻辑。我们有没有办法,将其保存在同一个元素中,姓名、年龄以及性别都作为这个元素的3个属性。

答:使用Python中的字典

2、Python中字典(dict)的概念

特点:

① 符号为 大括号(花括号) => {}

② 数据为 键值对 形式出现 => {key:value},key:键名,value:值,在同一个字典中,key必须是唯一(类似于索引下标)

③ 各个键值对之间用逗号隔开

img

在字典中,键名除了可以使用字符串的形式,还可以使用数值的形式来进行表示

定义:

1
2
3
4
5
6
7
# 有数据字典
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

# 空字典
dict2 = {}

注意:key:value键值对,如果key是一个数字类型则不加引号,但是如果是字符串类型,必须使用单引号或双引号引起来

在Python代码中,字典中的key必须使用引号引起来

小结:

列表适合大批量数据存储、元组虽然类似列表,一旦定义完成后,就不能修改与删除(保护数据);

字典比较适合(某一事物)存储

3、字典的增操作(重点)

基本语法:

1
2
字典名称[key] = value
注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。

案例:定义一个空字典,然后添加name、age以及address这样的3个key

1
2
3
4
5
6
7
8
# 1、定义一个空字典
person = {}
# 2、向字典中添加数据
person['name'] = '刘备'
person['age'] = 40
person['address'] = '蜀中'
# 3、使用print方法打印person字典
print(person)

注意:列表、字典为可变类型

4、字典的删操作

del 字典名称[key]:删除指定元素

1
2
3
4
5
6
# 1、定义一个有数据的字典
person = {'name':'王大锤', 'age':28, 'gender':'male', 'address':'北京市海淀区'}
# 2、删除字典中的某个元素(如gender)
del person['gender']
# 3、打印字典
print(person)

5、字典的改操作

基本语法:

1
2
字典名称[key] = value
注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。

案例:定义一个字典,里面有name、age以及address,修改address这个key的value值

1
2
3
4
5
6
# 1、定义字典
person = {'name':'孙悟空', 'age': 600, 'address':'花果山'}
# 2、修改字典中的数据(address)
person['address'] = '东土大唐'
# 3、打印字典
print(person)

6、字典的查操作

① 查询方法:使用具体的某个key查询数据,如果未找到,则直接报错。

1
字典序列[key]

② 字典的相关查询方法

编号 函数 作用
1 keys() 以类列表返回一个字典所有的键
2 values() 以类列表返回字典中的所有值
3 items() 以类列表返回可遍历的(键, 值) 元组数据

注:字典相关方法,如keys、values、items不能直接使用,必须结合for循环遍历输出!!!

案例1:提取person字典中的所有key

1
2
3
4
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、提取字典中的name、age以及mobile属性
print(person.keys())

案例2:提取person字典中的所有value值

1
2
3
4
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、提取字典中的貂蝉、18以及13765022249号码
print(person.values())

案例3:使用items()方法提取数据

1
2
3
4
5
6
7
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、调用items方法获取数据,dict_items([('name', '貂蝉'), ('age', 18), ('mobile', '13765022249')])
# print(person.items())
# 3、结合for循环对字典中的数据进行遍历
for key, value in person.items():
print(f'{key}{value}')

四、集合类型

set集合,作用:无序且天生去重,特点:去重

1、什么是集合

集合(set)是一个无序、不重复的元素序列。

① 无序

② 天生去重

2、集合的定义

在Python中,我们可以使用一对花括号{}或者set()方法来定义集合,但是如果你定义的集合是一个空集合,则只能使用set()方法。

疑问:字典、集合都可以通过{}花括号,如何区分呢?答:如果{}是key:value键值对,就代表是字典;如果是具体的值,就是集合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 定义一个集合
s1 = {10, 20, 30, 40, 50}
print(s1)
print(type(s1))

# 定义一个集合:集合中存在相同的数据
s2 = {'刘备', '曹操', '孙权', '曹操'}
print(s2)
print(type(s1))

# 定义空集合
s3 = {}
s4 = set()
print(type(s3)) # <class 'dict'>
print(type(s4)) # <class 'set'>

3、集合操作的相关方法(增删查)

疑问:集合操作只有增删查而没有修改方法?

答:集合没有索引下标,也没有key,而且结合本身就是无序的,所以无法精准对集合中的元素进行修改。所以只有增删查方法。

☆ 集合的增操作

add()方法:向集合中增加一个元素(单一)

1
2
3
4
students = set()
students.add('李哲')
students.add('刘毅')
print(students)

☆ 集合的删操作

remove()方法:删除集合中的指定数据,如果数据不存在则报错

1
2
3
4
5
# 1、定义一个集合
products = {'萝卜', '白菜', '水蜜桃', '奥利奥', '西红柿', '凤梨'}
# 2、使用remove方法删除白菜这个元素
products.remove('白菜')
print(products)

☆ 集合中的查操作

in :判断某个元素是否在集合中,如果在,则返回True,否则返回False

1
2
3
4
5
6
7
# 定义一个set集合
s1 = {'刘帅', '英标', '高源'}
# 判断刘帅是否在s1集合中
if '刘帅' in s1:
print('刘帅在s1集合中')
else:
print('刘帅没有出现在s1集合中')

☆ 集合的遍历操作

1
2
for i in 集合:
print(i)

4、集合的应用场景

作业检查

1
2
3
4
5
6
# 1. 获取所有同学的信息集合
students = {'赵飞', '李航', '封勇', '张天宇'}
# 2. 获取所有已提交同学信息集合
submitted = {'赵飞', '李航'}
# 3. 求差集
print(students - submitted) # 没有交作业的同学

小结:

只要有去重需求,最简单的解决方法就是使用集合实现数据的存储!!