# 集合 set
- 跟数学中集合的概念一致
- 内容无序 + 内容不重复!!!不重复!!!不重复
# 1.通过set 关键字 sa = set() print(sa) # list a = [1,2,3,4,5,6,7,8,44,232,222,333,444,555,11,3,2,5] sb = set(a) print(type(a)) print(sb) # 2.使用大括号 ca = {1,2,3,4,5,6,4,3,3,45,5,5,4,33,4,4} print(type(ca)) print(ca)
# in 操作 if 2 in ca: print(343222) if 55 in ca: print(655) for i in ca: print(i)
# 集合的另一种遍历 aa = {(2,3,4),(243,345,12),("123safd","asfa","vvv")} for j,q,k in aa: print(j,q,k)
# 集合生成式 sa = {1,2,3,4,6,7,9,4,10} # 利用sa生成一个sb sb = {i for i in sa} print(sb) sc = {j for j in sa if j % 2 == 0} print(sc) # for 循环 生成平方值 sm = { q **2 for q in sa } print(sm) # 双层for循环 生成平方值 ss = {m*n for m in sa for n in sa if m == n} print(ss)
1 # 集合的内置函数 2 # len : 长度 3 print(len(ss)) 4 # Max min 最值 5 # add: 向集合中添加元素 6 sa = {1,2,3,4,5,6,6,5,4,3,2,1} 7 print(sa) 8 # 打印结果不是sa 求解? 9 print(sa.add(7)) 10 11 sa.add(7) 12 print(sa) 13 # clear 清空 14 sb = {1,2,3,4,5,6,7} 15 # 删除操作 16 #remove 和discard 的区别 17 print(sb) 18 sb.remove(5) 19 print(sb) 20 # remove 删除的数如果不在集合中,报错 21 sb.remove(5)
1 # discard 2 sq = {7,8,9,10,11} 3 sq.discard(9) 4 print(sq) 5 #当集合中没有 要删除的元素时再用discard删除 不会报错该怎么打印就怎么打印 6 sq.discard(9) 7 print(sq)
# pop弹出集合的一个内容 # 删除的内容是随机的 #删除的内容没什么规律,随机 sa = {1,2,3,4,5,6,7} print(sa) sa.pop() print(sa)
1 # 集合的数学操作 2 #intersection:交集 3 sa = {1,2,3,4,5,6} 4 sb = {4,5,6,7,8,9} 5 # sa 和sb 的交集 6 print(sa.intersection(sb)) 7 # difference:交集 8 print(sa.difference(sb)) 9 # 差集的另外一种表示 10 print(sa - sb) 11 #union:并集 12 print(sa.union(sb))
# frozenset 冰冻集合
- 不允许修改的集合
print(sa) sb = frozenset(sa) print(sb)
# dict 字典
- 字典是python中唯一的映射类型 ,它是以{} 括起来的键值对
- 在dict中 key 是唯一的 在保存的时候通过key来计算出一个内存地址,然后将这个key-value保存在这个地址汇总,这种算法被称为 哈希算法(hash)
- 语法dic = {key1:value,key2:value}
- 1,已知的可哈希(不可变)的数据类型: int, str, tuple, bool
- 2,不可哈希(可变)的数据类型: list, dict, set
dic = {123:1234,'abc':12,"qw":1231,"asa":'asda'} print(dic[123])
1 dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅哥', '美⼥'], (1, 2, 3): '麻花藤'} 2 print(dic[123]) 3 print(dic[True]) 4 print(dic['id']) 5 print(dic['stu']) 6 print(dic[(1, 2, 3)]) 7 print(dic)
# 字典的特性 - 字典是序列类型 但是 是无序 序列 ,所以没有分片和索引 - 字典中的数据每个都有键值对组成的 既 k,v - key :必须是可哈希的值,比如 int str float tuple ; - list dict set 不行 - value :任何值
# 字典的常见操作
1 # 访问数据 2 d = {"one" : 1, "two" : 2,"three" : 3} 3 print(d) 4 # 注意访问格式 5 # 中括号内是键值 6 print(d["one"]) 7 # 修改 字典中 某个值的操作 8 d["one"] = "ens" 9 print(d) 10 print(id(d)) 11 # 删除字典中某个操作 12 # 使用 del操作 13 del d["one"] 14 print(d) 15 print(id(d))
1 # 成员 检测,in,not in 2 d = {"one" : 1, "two" : 2,"three" : 3} 3 4 if 2 in d: 5 print("value") 6 if "one" in d: 7 print("key") 8 if ("one",2) in d: 9 print("kv")
1 # 遍历 在Python2 和Python3 中 区别较大,代码不通用 2 # 按 key 来使用 for循环 3 d = {"one" : 1, "two" : 2,"three" : 3} 4 # 使用for 循环 直接按key值访问 5 for k in d: 6 print(k,d[k]) 7 # 上述代码 可以改写成如下 8 for k in d.keys(): 9 print(k,d[k]) 10 #只访问字典的值 11 for v in d.values(): 12 print(v) 13 # 注意下方特殊用法 14 for k,v in d.items(): 15 16 print(k,"---",v)
# 字典生成式
1 d = {"one" : 1, "two" : 2,"three" : 3} 2 # 常规字典生成式 3 dd = {k:v for k,v in d.items() } 4 print(dd) 5 # 筛选条件 6 dd = {k:v for k,v in d.items() if k == "one" and v == 1} 7 print(dd) 8 dd = {k:v for k,v in d.items() if v % 2 == 0} 9 print(dd)
1 # 字典通用函数 len ,max,min ,dict 2 # str(字典):返回字典的字符串格式 3 d = {"one" : 1, "two" : 2,"three" : 3} 4 print(str(d))
1 # clear:清空字典 2 # items:返回字典的键值对组成的元组格式 3 d = {"one" : 1, "two" : 2,"three" : 3} 4 dd = d.items() 5 print(type(dd)) 6 print(dd) 7 # keys:返回字典的键组成的一个结构 8 print("*"*50) 9 k = d.keys() 10 print(type(k)) 11 print(k) 12 # value:同理,一个可迭代的结构 13 print("*"*50) 14 v = d.values() 15 print(type(v)) 16 print(v)
1 # get:根据指定的键返回相应的值 2 # 好处是 可以设定默认值 3 d = {"one" : 1, "two" : 2,"three" : 3} 4 print(d.get("one")) 5 # get 默认值是None 可以设定 6 print(d.get("one",100)) 7 print(d.get("asdasd",100)) 8 # 如果写一个没有的键的时候 返回None 如果写成 中括号样式的d["sada"] 会直接报错 9 print(d["asas"])
1 # fromkeys: 使用指定的序列 作为键,使用一个值作为字典的所有的键的值 2 l = ["one","two","therr"] 3 # 注意fromkeys两个参数的类型 4 # 注意formkeys 的调用主体 5 d = dict.fromkeys(l,"hahahah") 6 print(d)
# 关于列表函数
1 # append 插入一个内容,在末尾追加 2 a = [i for i in range(1,5)] 3 print(a) 4 a.append(1000) 5 print(a)
1 # insret 指定位置插入 2 # insert(index,data)插入位置是index前面 3 print(a) 4 a.insert(2,5) 5 print(a)
1 # 删除 2 # del 删除 3 # pop 从对位拿出一个元素,即把最后一个元素取出来 4 print(a) 5 last_data = a.pop() 6 print(last_data) 7 print(a)
1 # remove 在列表中删除指定的值元素 2 # 如果list中没有需要删除的值 则remove就会报错 3 # 在做 remove 操作的时候 应该使用try。。。excepyt 语句 或者先行做下判断 4 print(a) 5 print(id(a)) 6 a.remove(5) 7 print(a) 8 print(id(a)) 9 # 输出两个id值一样 说明 remove 操作是在原list直接操作
# clear :清空 print(a) print(id(a)) a.clear() print(id(a)) print(a) a = list() print(id(a))
# reverse 翻转列表内容,原地翻转 a = [1,2,3,4,5,6,7] print(a) print(id(a)) a.reverse() print(a) print(id(a))
# extend 扩展列表,两个列表 把一个直接拼接到最后一个上 a = [1,2,3,4,5,6] b = [7,8,9,10] print(b) print(id(b)) b.extend(a) print(b) print(id(b))
# count 查找列表中指定值或元素个数 print(b) print(b.count(8))
1 # copy 拷贝 (浅拷贝) 2 # 列表类型变量赋值示例 3 a = [1,2,3,4,5,6,7,8,9] 4 print(a) 5 # list类型 简单赋值操作 是传地址 6 b = a 7 b[3] = 777 8 print(id(a)) 9 print(a) 10 print(id(b)) 11 print(b) 12 13 print("*"* 50) 14 b = a.copy() 15 print(a) 16 print(id(a)) 17 print(b) 18 print(id(b)) 19 20 print("*"*55) 21 b[3] = 999 22 print(a) 23 print(b)
1 # 深拷贝 跟浅拷贝的区别 2 # 出现下列问题 的原因是 copy 函数是一个浅拷贝函数 既值拷贝一层内容 3 # 深拷贝需要使用特定工具 4 a = [1,2,3,[1,2,3]] 5 b = a.copy() 6 print(id(a)) 7 print(id(b)) 8 print(id(a[3])) 9 print(id(a[3])) 10 a[3][2] = 666 11 print(a) 12 print(b) 13 print(id(a)) 14 print(id(b))