1 #集合
2
3 #集合是一种可迭代 无序 不能包含重复元素的 数据结构
4 #在不考虑顺序和重复性的情况下,序列和集合是可以相互替代的
5 #集合分为可变集合和不可变集合
6 # set frozenset
7
8 #创建可变集合
9 #直接用{}来创建 或者用set()来创建
10 a={1,3,5,7,9,"1"};
11 #b=set(1,2);
12 #当我们这样写的时候又会报错
13 #iterable要求可以迭代
14 b=set((1,2,3,4,5))
15 print(a,"\n",b);
16 #这里我们反复的重复这段语句
17 #我们发现a中的"1"的位置总是在变动的
18 #因为集合是无序的,我们无法向序列一样用下标来访问
19 #print(a[0]);
20 #所以这样的操作是无效的
21
22 #而如果存在数据内容又重复的,他会自动的只保留一个数据
23 b=set([1,2,1,2,1,2]);
24 print(b);
25 print(type(b));
26 #输出结果也只有1和2
27
28 c={};
29 print(type(c));
30 #这里就算{}中什么都没有,但是也已经创建了集合c
31 #但是却不是set, 而是dict,就是字典
32
33 #如果我们需要查看某个集合里面数据个数
34 #需要使用len()函数!!! 是函数!!不是方法!!!
35 print(len(b));
36
37 print("///////////////////////////////////");
38
39 #修改可变集合
40 #add(elem)添加元素
41 #如果元素已经存在,则不会重复添加,也不会异常抛出
42 b.add(1);
43 print(b);
44 #输出结果还是1和2,也没有异常的抛出
45 #注意一下,这个方法是没有返还值的
46 print(b.add(3));
47 #如果这么写的话,输出的结果就是None
48
49 #上面我们建立的c的类型并不是set而是dict
50 #c.add(1);
51 #那么这句话就自然无法执行
52 #因为.add是set的方法而不是dict的
53
54 print("///////////////////////////");
55
56 #删除元素
57 #remove(elem);
58 a.remove(1);
59 print(a);
60 #这里a中的1就被移除了
61 #a.remove(55);
62 #而移除的元素不在其中
63 #就会抛出异常
64 a.add(1);
65 print(a.remove(1));
66 #方法remove没有返还值
67
68 #remove如果没有找到对应的值的时候
69 #会异常抛出
70 #我们也可以用discard(elem);来实现
71 #discard就算没有找到对应的数据删除
72 #也不会异常抛出
73
74 a.discard(100);
75 #程序并没有抛出错误
76 a.add(100);
77 a.discard(100);
78 print(a);
79
80
81 #除了remove我们还有pop可以使用
82 #基本用法一致
83 #pop()删除集合中任意一个元素并且告诉你删除的是哪一个
84 d={1,2,3,4,5,6};
85 print(d.pop());
86 print(d);
87 #返还值是1,而1也被移除了
88 #我们也可以换种思维理解
89 dd=d.pop();
90 print(dd);
91 print(d);
92 #如果把代码写成这样
93 #可以理解成取d中的一个元素赋值给了dd
94
95 #clear()
96 #清除集合,就不用多说了
97 d.clear();
98 print(d);
99
100 #遍历集合
101 #因为集合是没有索引的,所以不能通过下标来确定
102 #但是可以通过for语句的循环来访问集合内的所有元素
103 d={1,3,8,9,5,"p"};
104 for x in d:
105 print(x);
106 #这样我们就可以访问集合里的所有元素了
107
108 print("////////////////////////////////////");
109
110 #不可变集合
111 #frozenset(iterable);
112 #来创建不可变集合,同时不能用{}来创建,那创建出来就是一个set可变的集合
113
114 f=frozenset([1,8,3,5,4]);
115 print("{0}\n{1}".format(f,type(f)));
116 #那么它可不可以将set转变成frozenset呢?
117 frozenset(d);
118 print("{0}\n{1}".format(d,type(d)));
119 #这样虽然没有报错,但是d的类型任然没有发生变化
120 #frozenset([d]);
121 #print("{0}\n{1}".format(d,type(d)));
122 #而这样写却直接报错了
123 #这里frozenset应该和set是不能相互转换的(我没查到)
124
125 #集合推导式
126 #和列表推导式完全一致
127 #唯一的区别就是,结果输出是给了集合
128 #不做赘述
悟已往之不谏,知来者之可追