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," ",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} {1}".format(f,type(f))); 116 #那么它可不可以将set转变成frozenset呢? 117 frozenset(d); 118 print("{0} {1}".format(d,type(d))); 119 #这样虽然没有报错,但是d的类型任然没有发生变化 120 #frozenset([d]); 121 #print("{0} {1}".format(d,type(d))); 122 #而这样写却直接报错了 123 #这里frozenset应该和set是不能相互转换的(我没查到) 124 125 #集合推导式 126 #和列表推导式完全一致 127 #唯一的区别就是,结果输出是给了集合 128 #不做赘述