Python set(集合)、字典(dicts)、

# 集合 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))

猜你喜欢

转载自www.cnblogs.com/liutan/p/12526352.html
今日推荐