2022.07.14 DAY14
1. 实例
1. 表格
# 创建表格
def createTable():
staff1 = {'name': 'YJP', 'age': 21, 'city': '北京', 'job': 'Engineer'}
staff2 = {'name': 'XX', 'age': 20, 'city': '上海', 'job': 'Engineer'}
staff3 = {'name': 'ZHJ', 'age': 26, 'city': '上海', 'job': 'AI'}
table = [staff1, staff2, staff3]
# 获得第二行的人的name
print("获得第二行的人的name:")
print(table[1].get('name'))
# 打印表中所有的年龄
print("打印表中所有的年龄:")
for i in range(len(table)): # i --> 0, 1, 2
print(table[i].get('age'))
# 打印表的所有数据
print("打印表的所有数据:")
for i in range(len(table)):
print(table[i].get('name'), table[i].get('age'), table[i].get('city'), table[i].get('job'))
# Main
if __name__ == '__main__':
createTable()
2. 字典核心底层原理
1. 字典对象的核心是散列表
-
散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。
-
每个bucket又有两个部分:一个是键对象的引用,一个是值对象的引用。
-
哈希函数 存 取
-
总结:
- 键必须可以散列。
- 数字、字符串、元组,都是可散列的。
- 自定义对象需要支持下面三点:
- 支持hash函数;
- 支持通过__eq__()方法检测相等性;
- 若a==b为真,则hash(a)==hash(b)也为真。
- 字典在内存中开销巨大,典型的空间换时间。
- 字典查询熟读很快。
- 往字典里面添加新建可能导致扩容,导致散列表中的次序变化。因此,不要在遍历字典的同时进行字典的修改。
- 键必须可以散列。
3. 集合
- 集合是无需可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典中的"键对象",因此是不能重复且唯一的。
1. 集合的创建和删除
-
使用{}创建集合毛病使用add()方法添加元素
# 使用 {} 创建集合 def test(): mySet = {10, 20, 30} print(mySet) mySet.add(520) print(mySet) # Main if __name__ == '__main__': test()
-
使用set(),经列表、元组等可迭代对象转成集合。如果原来的数据存在重复,则值保留一个。
# 使用 set() 创建集合 def test2(): a = ['a', 'b', 'c', 'd'] mySet = set(a) print(mySet) # Main if __name__ == '__main__': test2()
-
remove删除指定元素,clear()清空整个集合
mySet = {10, 20, 30} mySet.remove(20) # 删除指定元素 mySet.clear() # 清空
2. 集合的相关操作
-
Python对集合提供了并集、交集、差集等运算。
# 集合的运算 def test3(): mySet = {'embedded', 'vue', 'nature', 'space'} print(mySet) herSet = {'web', 'vue', 'others'} print(herSet) # 并集 print(mySet | herSet) print(mySet.union(herSet)) # 交集 print(mySet & herSet) print(mySet.intersection(herSet)) # 差集 print(mySet - herSet) print(mySet.difference(herSet)) # Main if __name__ == '__main__': test3()