Python学习日记08(元组、字典、集合)
列表(上期内容补充)
列表的嵌套
由于列表中存储的是可变化的数据类型,所以当我们把一个列表当作元素存入列表中时,列表的嵌套也就完成了。
a = ['上海', '北京', '深圳', '广东']
b = ['乌海', '呼伦贝尔']
a.append(b)
print(a)
输出结果:
['上海', '北京', '深圳', '广东', ['乌海', '呼伦贝尔']]
当在使用列表嵌套时,只需要将嵌套的列表当作大列表中的一个元素进行操作即可。
列表的推导式
所谓的列表推导式,就是指的轻量级循环创建列表。
# 生成一个0-9的列表
# for循环写法
num = []
for i in range(0,10):
num.append(i)
print(num)
# 列表推导式写法
num2 = [j for j in range(0, 10)]
print(num2)
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表的复制
a = 12
b = a
b = 13
print(b)
print(a)
nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1
nums2[0] = 100
print(nums2)
print(nums1)
输出结果:
13
12
[100, 5, 8, 9, 10, 12]
[100, 5, 8, 9, 10, 12]
在python中的赋值运算都是引用(即内存地址)。对于可变 类型而言,修改源数据的值,会改变赋值对象的值。
copy模块的使用
-
列表的copy函数
使用列表的copy函数,可直接将列表进行复制,编程一个全新的列表,这种赋值方法就式浅拷贝
nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1.copy() # 调用列表的copy方法,可以复制出一个新的列表
nums2[0] = 100
# 修改新列表里的数据,不会影响到原有列表里的数据
print(nums2)
print(nums1)
输出结果:
[100, 5, 8, 9, 10, 12]
[1, 5, 8, 9, 10, 12]
除了使用列表的copy函数外,Python还提供了copy模块来复制对象。copy模块提供了浅拷贝和深拷贝两种复制方法,虽然他们的使用方式相同,但在执行效果上又具有一定的差距。
-
浅拷贝
浅拷贝是对于对象的顶层拷贝,拷贝了对象的引用,而没有拷贝内容。
import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
# 浅拷贝只会拷贝最外层的对象,里面的数据不会拷贝,而是直接指向
words2 = copy.copy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['no', 'ok'], 'bad']
# wrods2 里的 yes 被修改成了 no
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']
输出结果:
['hello', 'good', ['no', 'ok'], 'bad']
['你好', 'good', ['no', 'ok'], 'bad']
可以看出来在对列表中的可变类型进行重新赋值时,源列表中的可变类型也发生了变化,而对于列表中的不可变量重新赋值时,源列表并未发生改变。
-
深拷贝
不同于浅拷贝,深拷贝是对于一个对象所有层次的递归拷贝。
import copy
words1 = ['hello', 'good', ['yes', 'ok'], 'bad']
# 深拷贝会将对象里的所有数据都进行拷贝
words2 = copy.deepcopy(words1)
words2[0] = '你好'
words2[2][0] = 'no'
print(words1) # ['hello', 'good', ['yes', 'ok'], 'bad']
print(words2) # ['你好', 'good', ['no', 'ok'], 'bad']
输出结果:
['hello', 'good', ['yes', 'ok'], 'bad']
['你好', 'good', ['no', 'ok'], 'bad']
深拷贝完全形成两个列表。
-
切片
列表和字符串类似,也支持切片,而切片的本质也是浅拷贝。
元组
python中元组和列表类似,但是元组的元素是不可进行修改的。
元组的定义
元组使用()
进行定义。
当需要定义一个只有一个元素的元组时,需要在唯一元素后加,
号
atuple = ('python','2109.56')
btuple = ('java',)
元组的特性
元组中的元素是不可修改的,所以“增删改”在元组中并不存在。
字典
虽然列表可以存储任意的数据类型,但是当存储的元素含义较为丰富,具有不同的意义时,列表就不能很好的体现数据间的差异了。
针对列表的劣势,字典可以很好的处理不同含义的数据间的存储。
- 列表更适合存储具有相同性质的数据,如多个名字
- 字典更适合存储一类相同事务的不同属性。
字典的定义
在字典中,数据以**键值对(key:velue)**的形式进行存储,使用{}
进行定义。
person = {'name': 'zhangsan', 'age': 18}
字典的特性
-
字典和列表一样可以存储多个数据
-
字典中的
键值(key)
是唯一的,若出现多个key值
,后续出现的value
会覆盖掉之前key
对应的value
。 -
key:value
是一对多关系 -
键值(key)
可以使用数字、布尔、元组等不可变数据类型,但一般使用字符串。 -
字典可以通过
键值(key)
进行查询相关联的值(value)
字典的操作
查看字典元素
- 单一元素的查询
除了使用指定key值
进行数据查询外,get()
也是一种方法。
atuple = {'name': 'lisa', 'age': 18}
print(atuple['name'])
print(atuple.get('name'))
输出结果:
lisa
lisa
注意:获取字典的默认值不会对字典内进行修改。
-
字典的遍历
- 遍历字典中的
key
(键)
atuple = {'name': 'linshiyu', 'age': 18} for key in atuple.keys(): print(key) 输出结果: name age
- 遍历字典中的
value
值
atuple = {'name': 'linshiyu', 'age': 18} for value in atuple.values(): print(value) 输出结果: linshiyu 18
- 遍历字典中的项(元素)
atuple = {'name': 'linshiyu', 'age': 18} for item in atuple.items(): print(item) 输出结果: ('name', 'linshiyu') ('age', 18)
- 遍历字典中的
key:value
(键值对)
atuple = {'name': 'linshiyu', 'age': 18} for key,value in atuple.items(): print(f'key= {key}, value= {value}') 输出结果: key= name, value= linshiyu key= age, value= 18
- 遍历字典中的
添加字典元素
代码格式:字典名['key'] = 'value'
当使用添加语句时,如果key值
在字典中不存在,那么字典会新增这个键值对
atuple = {'name': 'linshiyu', 'age': 18}
atuple['address'] = '上海'
print(atuple)
输出结果:
{'name': 'linshiyu', 'age': 18, 'address': '上海'}
删除字典元素
python提供了两种删除字典的方法
- del方法 指定删除字典中的键,当键消失时它所对应的value值也会消失;也可以删除整个字典(包括字典名)
info = {'name':'班长', 'id':100}
print('删除前,%s' % info)
del info['name'] # del 可以通过键删除字典里的指定元素
print('删除后,%s' % info)
输出结果:
删除前,{'name': '班长', 'id': 100}
删除后,{'id': 100}
- clear()函数 清空字典
info = {'name':'monitor', 'id':100}
print('清空前,%s'%info)
info.clear()
print('清空后,%s'%info)
输出结果:
清空前,{'name': 'monitor', 'id': 100}
清空后,{}
修改字典
修改字典中的元素,就是修改字典中键值对key:velue
中的value值。
atuple = {'name': 'linshiyu', 'age': 18}
atuple['age'] = 25
print(atuple)
输出结果:
{'name': 'linshiyu', 'age': 25}
集合
集合(set)是一个无序的不重复元素的序列,可以使用{}
或set()
函数进行创建。
字典和集合都是用到{}
,但定义一个空集合时只能使用set()
;
{}
代表一个空字典
集合常用函数
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
union | 返回两个集合的并集 |
update() | 给集合添加元素 |