一、列表
1、创建列表
之前我们用变量存储数字,字符串等,但我们有时候想用到多个变量,总不能定义多个变量吧,这时候我们可以使用列表,创建一个空列表的方法为
a = [] 或者 a = list()
print(a)
结果: []
如果已经有初始化的值1, 2, 3, 4,那么格式为
a = [1, 2, 3, 4]
print(a)
结果: [1, 2, 3, 4]
我们也可以初始化字符串
a = [‘Donnie’, ‘John’, ‘Jack’]
print(a)
结果: ['Donnie', 'John', 'Jack']
也可以整型,字符串的混合
a = [1, ‘John’, ‘Jack’, 2]
print(a)
结果: [1, 'John', 'Jack', 2]
2、列表基本操作
我们可以通过下标获取列表中的值,下标从0开始,比如我们想获取a中的第1个值,那么使用a[0]就好,以此类推
a = [1, 2, 3, 4]
print(a[0])
print(a[2])
结果: 1
3
另外,当我们已知列表中的值,想知道某个值的下标是多少,可以使用index方法
a = [1, 2, 3, 4]
print(a.index(3))
结果: 2
我们如果想获取最后面的数据,可以使用pop方法
a = [1, 2, 3, 4]
print(a.pop()) # 每pop一次,队列的数据就会变少
print(a)
print(a.pop())
print(a)
结果: 4
[1, 2, 3]
3
[1, 2]
获取列表中某一个元素出现的次数
a = [1, 2, 3, 4, 5, 1, 1, 2]
print(a.count(1)) # 统计1出现的次数
print(a.count(2)) # 统计2出现的次数
print(a.count(3)) # 统计3出现的次数
结果: 3
2
1
对列表元素进行升序排序
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.sort()
print(a)
结果: [1, 1, 1, 2, 2, 3, 5, 8]
对列表元素进行降序排序
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.sort(reverse=True)
print(a)
结果: [8, 5, 3, 2, 2, 1, 1, 1]
倒序输出列表元素
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.reverse()
print(a)
结果: [2, 1, 1, 5, 8, 2, 3, 1]
在列表中某一位置插入元素
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.insert(1, 100) # 在第一个元素之后插入100
print(a)
结果: [1, 100, 3, 2, 8, 5, 1, 1, 2]
在列表尾部一次性追加另一个列表中的多个值
a = [1, 3, 2, 8, 5, 1, 1, 2]
b = ['Donnie', 'John']
a.extend(b)
print(a)
结果: [1, 3, 2, 8, 5, 1, 1, 2, 'Donnie', 'John']
删除列表中的某一个元素
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.remove(8)
print(a)
结果: [1, 3, 2, 5, 1, 1, 2]
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.remove(1) # 若要删除的元素在列表中存在多个,则默认删除第一个
print(a)
结果: [3, 2, 8, 5, 1, 1, 2]
获取列表的长度
a = [1, 3, 2, 8, 5, 1, 1, 2]
print(len(a))
结果: 8
清空列表元素
a = [1, 3, 2, 8, 5, 1, 1, 2]
a.clear()
print(a)
结果: []
3、浅拷贝与深拷贝
我们再初学列表的时候,总是会踩进这个拷贝的坑里面,举一个简单的例子:
a = [1, 3, 2, 8, 5, 1, 1, 2]
b = a
print(a)
print(b)
b.append('Donnie')
print(a)
print(b)
结果: [1, 3, 2, 8, 5, 1, 1, 2]
[1, 3, 2, 8, 5, 1, 1, 2]
[1, 3, 2, 8, 5, 1, 1, 2, 'Donnie']
[1, 3, 2, 8, 5, 1, 1, 2, 'Donnie']
我们将a复制给b,然后在b队列的尾部追加一个Donnie的字符串,本来我们想要的结果是下面这样的:
a:[1, 3, 2, 8, 5, 1, 1, 2]
b:[1, 3, 2, 8, 5, 1, 1, 2, 'Donnie']
结果发现改了b之后,a的数据也变了,这是因为虽然表面看上去是a赋值给b,两个是毫不相关的,但实际上a和b指向的都是同一个地址,修改值实际上是修改地址上的内容,因为两个指向同一地址,所以a和b的数据会同时变化,如果想要a赋值给b并且两个互不干扰的话,那就要采用深拷贝,需要用到copy这个库
import copy
a = [1, 3, 2, 8, 5, 1, 1, 2]
b = copy.deepcopy(a)
print(a)
print(b)
b.append('Donnie')
print(a)
print(b)
结果: [1, 3, 2, 8, 5, 1, 1, 2]
[1, 3, 2, 8, 5, 1, 1, 2]
[1, 3, 2, 8, 5, 1, 1, 2]
[1, 3, 2, 8, 5, 1, 1, 2, 'Donnie']
二、元组
元组与列表相似,区别在于,列表可以修改,但元组一旦初始化成功之后就不能再修改
1、创建元组
a = (1, 2, 3)
print(a)
结果: (1, 2, 3)
2、元组的基本操作
通过下标查找元素
a = (1, 2, 3, 1, 2, 2)
print(a[0])
print(a[2])
print(a[5])
结果: 1
3
2
统计某一个元素出现的次数
a = (1, 2, 3, 1, 2, 2)
print(a.count(1)) # 统计1出现的次数
print(a.count(2)) # 统计2出现的次数
print(a.count(3)) # 统计3出现的次数
结果: 2
3
1
查找元素所在的下标
a = (1, 2, 3, 1, 2, 2)
print(a.index(3)) # 查找元素3所在位置的下标
print(a.index(1)) # 查找元素1所在位置的下标,若存在多个相同的元素,则取第一个第一个的下标
print(a.index(2)) # 查找元素2所在位置的下标,若存在多个相同的元素,则取第一个第一个的下标
结果: 2
0
1
获取元组的长度
a = (1, 2, 3, 1, 2, 2)
print(len(a))
结果: 6
三、字典
字典也是一种存储的模型,与列表不同的是,字典每个元素拥有一个唯一的键值,基本格式为
a = {key1: value1, key2: value2, key3: value3, ... ...}
1、创建字典
** 创建一个空白字典**
a = {} 或者 a = dict()
print(a)
结果: {}
创建一个非空字典
a = {'name': 'Donnie', 'age': 22}
print(a)
结果: {'name': 'Donnie', 'age': 22}
2、字典的基本操作
获取列表中key值对应的value
a = {'name': 'Donnie', 'age': 22}
print(a['name'])
print(a['age'])
结果: Donnie
22
获取字典的长度
a = {'name': 'Donnie', 'age': 22}
print(len(a))
结果: 2
修改或者追加字典中的值
a = {'name': 'Donnie', 'age': 22}
a['height'] = 180 # 字典中追加一个key值为height,value为180的值
a['name'] = 'John' # 将name对应的value由Donnie改为John
print(a)
结果: {'name': 'John', 'age': 22, 'height': 180}
删除字典中某一个key: value
a = {'name': 'Donnie', 'age': 22}
a.pop('name')
print(a)
结果: {'age': 22}
清除字典中的所有值
a = {'name': 'Donnie', 'age': 22}
print(a)
a.clear()
print(a)
结果: {'name': 'Donnie', 'age': 22}
{}
3、浅拷贝与深拷贝
同样,字典与列表一样,也有浅拷贝和深拷贝之分
浅拷贝
a = {'name': 'Donnie', 'age': 22}
b = a
b['height'] = 180
print(a)
print(b)
结果: {'name': 'Donnie', 'age': 22, 'height': 180}
{'name': 'Donnie', 'age': 22, 'height': 180}
深拷贝
import copy
a = {'name': 'Donnie', 'age': 22}
b = copy.deepcopy(a)
b['height'] = 180
print(a)
print(b)
结果: {'name': 'Donnie', 'age': 22}
{'name': 'Donnie', 'age': 22, 'height': 180}
四、复合操作
对于列表、字典来说,他们之间是可以任意嵌套的,以提高我们代码的灵活性
a = [1, 2, 3]
b = (1, 2, 3)
c = {'name': 'Donnie', 'age': 22}
a.append(b) # a列表后面追加元组b
print(a)
a.append(c)# a列表后面追加字典c
print(a)
a = [1, 2, 3]
b = (1, 2, 3)
c = {'name': 'Donnie', 'age': 22}
c['a'] = a # c字典中添加一个key名字为a,value为a列表的对象
print(c)
c['b'] = b # c字典中添加一个key名字为b,value为b元组的对象
print(c)
结果: [1, 2, 3, (1, 2, 3)]
[1, 2, 3, (1, 2, 3), {'name': 'Donnie', 'age': 22}]
{'name': 'Donnie', 'age': 22, 'a': [1, 2, 3]}
{'name': 'Donnie', 'age': 22, 'a': [1, 2, 3], 'b': (1, 2, 3)}
五、总结
我们学习了列表,元组和字典,他们大大提高了我们对多数据的集成和复用,为了更好的、方便的快速添加和提取这些数据,我们再下一章中为大家介绍条件判断,循环等语句的操作