目录
1.dict和list中copy方法画图加代码解释(重新画一下)
3.dict中获取所有的key,获取所有的value,获取所有的item
6.set中,求差集,求合集,求交集(要求在原集合上操作),添加一个元素,删除一个元素(使用多种方法)
交集(在原集合上操作):使用intersection_update()方法
删除一个元素(多种方法):discard()、pop()、remove()
1.dict和list中copy方法画图加代码解释(重新画一下)
代码解释如下:
list_data = [1, 2, [3, 4, 5]]
copy_list = list_data.copy()
print(copy_list) # [1, 2, [3, 4, 5]]
print(id(copy_list)) # 2977435334528
print(id(list_data)) # 2977435238080
copy_list[0] = 10
copy_list[1] = 20
print(copy_list) # [10, 20, [3, 4, 5]]
print(list_data) # [1, 2, [3, 4, 5]]
copy_list[2][0] = 30
print(copy_list) # [10, 20, [30, 4, 5]]
print(list_data) # [1, 2, [30, 4, 5]]
print(id(copy_list[2])) # 2977435335616
print(id(list_data[2])) # 2977435335616
copy_list[2] = [1, 2, 3]
print(copy_list) # [10, 20, [1, 2, 3]]
print(list_data) # [1, 2, [30, 4, 5]]
结论:
浅拷贝:指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。
list_data和他浅拷贝产生的copy_list的id值不相等,所有说明他们是两个不同的对象。
拷贝原对象中各子对象,但不会拷贝原对象的内部的子对象的子对象。
所以当改变copy_list中的每一个元素,只改变copy_list自身;但是如果改变的是其中某个元素的子元素时,由于copy_list和list_data都引用的是这个对象,故当copy_list[2][0]改变,list_data的[2][0]的值也会改变。
2.dict中扩展字典长度(多种方法)
-
直接扩展
# 直接添加
dict_data = {1: 'a', 2: 'b', 3: 'c'}
dict_data[4] = 'd'
print(dict_data) # {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
-
通过setdefault()方法
# 通过setdefault()方法
dict_data = {1: 'a', 2: 'b', 3: 'c'}
print(dict_data.setdefault(4))
print(dict_data)
print(dict_data.setdefault(5, 'e'))
print(dict_data)
结果:
-
通过update()方法
# 通过update()方法
dict_data = {1: 'a', 2: 'b'}
dict_data.update(one=1, two=2)
print(dict_data)
dict_data.update({3: 'c'})
print(dict_data)
dict_data.update([(4, 'd')])
print(dict_data)
dict_data.update([[5, 'e']])
print(dict_data)
dict_data1 = {10: 1, 20: 2}
dict_data.update(dict_data1.items())
print(dict_data)
结果:
3.dict中获取所有的key,获取所有的value,获取所有的item
通过:
- keys()方法获取所有的key,返回的是一个'dict_keys'类型的数据;
- values()方法获取所有的value,返回的是一个'dict_values'类型的数据;
- items()方法获取所有的item,返回的是一个'dict_items'类型的数据。
dict_data = {1: 'a', 2: 'b', 3: 'c'}
# 获取所有的key
print(dict_data.keys(), type(dict_data.keys()))
# 获取所有的value
print(dict_data.values(), type(dict_data.values()))
# 获取所有的item
print(dict_data.items(), type(dict_data.items()))
结果:
4.dict中通过一个不存在的key去获取值(要求不报错)
通过get()和setdefault()方法,两个方法相似,不同之处是setdefault()方法会把不存在的这个键和对应的默认值,写入dict。
dict_data = {1: 'a', 2: 'b', 3: 'c'}
print(dict_data.get(4)) # 默认值为None
print(dict_data.get(4, 'd')) # 默认值为'd'
print(dict_data)
print(dict_data.setdefault(4))
print(dict_data.setdefault(5, 'e'))
print(dict_data)
结果:
5.定义空集合
使用内置的claer()方法:
# 定义空集合set
set_data = {1, 3, 2, 4}
set_data.clear()
print(set_data, type(set_data)) # set() <class 'set'>
6.set中,求差集,求合集,求交集(要求在原集合上操作),添加一个元素,删除一个元素(使用多种方法)
-
差集:difference()方法
# 差集
set_data1 = {1, 3, 2}
set_data2 = {2, 4, 5}
print(set_data1.difference(set_data2)) # {1, 3}
-
合集:union()方法和update()方法。
两者区别是union返回一个新的集合接收合集,而update是在原集合上。
# 方法一:union()
set_data1 = {1, 3, 2}
set_data2 = {2, 4, 5}
result = set_data1.union(set_data2)
print(result) # {1, 2, 3, 4, 5}
# 方法二:update()
set_data1 = {1, 3, 2}
set_data2 = {2, 4, 5}
set_data1.update(set_data2)
print(set_data1) # {1, 2, 3, 4, 5}
-
交集(在原集合上操作):使用intersection_update()方法
set_data1 = {1, 3, 2}
set_data2 = {2, 4, 5}
set_data1.intersection_update(set_data2)
print(set_data1) # {2}
-
添加一个元素:add()、update()
# 添加一个元素
# 方法一:add()
set_data = {1, 3, 2}
set_data.add(4)
print(set_data) # {1, 2, 3, 4}
# 方法二:update()
set_data.update({5})
print(set_data) # {1, 2, 3, 4, 5}
-
删除一个元素(多种方法):discard()、pop()、remove()
# 方法一:discard()方法
set_data = {1, 3, 2, 4}
set_data.discard(4)
print(set_data) # {1, 2, 3}
# 方法二:pop()方法
set_data = {1, 3, 2, 4}
print(set_data.pop()) # 1
print(set_data) # {2, 3, 4}
# 方法三:remove()方法
# 方法二:pop()方法
set_data = {1, 3, 2, 4}
set_data.remove(1)
print(set_data) # {2, 3, 4}
7.数据类型转换:
将浮点型,字符串转换成整型
# 将浮点型,字符串转换成整型
float_var = 1.1
int_str_var = int(float_var)
print(int_str_var) # 1
str_var = '1234'
# 字符串必须是整数的字符串
int_str_var = int(str_var)
print(int_str_var) # 1234
将整数,字符串转成浮点型
int_var = 1
float_int_var = float(int_var)
print(float_int_var) # 1.0
str_var = '12.0'
# 字符串必须是数字的字符串(整数或小数)
float_int_var = float(str_var)
print(float_int_var) # 12.0
将二进制,八进制,16进制转成10进制
# 将二进制,八进制,16进制转成10进制
int_var = int("0b11000000", base=2)
print(int_var) # 192
int_var = int("0o100", base=8)
print(int_var) # 64
int_var = int("0x100", base=16)
print(int_var) # 256
将10进制转换成,二进制,八进制,16进制
# 将10进制转换成,二进制,八进制,16进制
int_var = bin(64)
print(int_var) # 0b1000000
int_var = oct(64)
print(int_var) # 0o100
int_var = hex(64)
print(int_var) # 0x40
将字符串转换为字节
str_var = '汉字'
bytes_var = bytes(str_var, encoding="utf-8")
print(bytes_var) # b'\xe6\xb1\x89\xe5\xad\x97'
将字节转换成字符串
bytes_var = b'\xe6\xb1\x89\xe5\xad\x97'
str_var = str(bytes_var, encoding="utf-8")
print(str_var) # 汉字
将ASCII码转换为字符串
str_var = chr(65)
print(str_var, type(str_var)) # A <class 'str'>
将字符串转换成ASCII码
str_var = "Aa"
print(ord(str_var[0])) # 65
print(ord(str_var[1])) # 97