Day7 of learning python--集合
1.知识回顾
1)str.isspace() 不常用,用来判断字符串是否全是空格,返回值是bool值;
1 s = ' ' 2 print(s.isspace())
循环列表时,去删除元素,会报错,或者得到的结果错误;
用index删除:
1 lis = [11,22,33,44,55] 2 for i in range(len(lis)): #range顾头不顾尾,从0开始数, 3 print(i) #len()获得的元素数为5 4 del lis[i] 5 print(lis)
结果为:

用remove()直接删除元素:
1 lis = [11,22,33,44,55] 2 for i in lis: 3 lis.remove(i) 4 print(lis)
结果为:

2)循环字典时,再循环体删除字典的键值对,会报错,因为字典时无序的,而我们在for循环里面一个一个删除会定序
1 dic = {'k1':'v1','k2':'v2','a3':'v3'} 2 for i in dic: 3 if 'k' in 'k1': 4 del dic[i] 5 print(dic)
结果为:

解决办法:1.重新定义一个字典,把不适合的放入另一字典里面。
1 dic = {'k1':'v1','k2':'v2','a3':'v3'} 2 dic1 = {} 3 for i in dic: 4 if 'k' not in i: 5 dic1.setdefault(i,dic[i]) 6 dic = dic1 7 print(dic)
1 dic = {'k1':'v1','k2':'v2','a3':'v3'} 2 l = [] 3 for i in dic: 4 if 'k' in i: 5 l.append(i) 6 for i in l: 7 del dic[i] 8 print(dic)
3)元祖,如果元祖里面只有一个元素,而不加逗号,那此元素时是什么类型,就是什么类型,元祖的元素可以是数字,字符串,列表,字典。第一个是list,第二是tuple
1 tu1 = ([1]) 2 tu2 = ([2],) 3 print(tu1,type(tu1)) 4 print(tu2,type(tu2))
4)转换成bool值,是false的是(),'', [], 0, set() ,{}
2.集合
集合:可变的数据类型,但是里面的元素是不可变的数据类型,无序,不重复,{}
不可变类型:可哈希,常数,字符串,元祖
可变类型:不可哈希,列表,字典,自定义类对象,即可以增,删,改,查
#增,add() ,update()
1 set1 = {'alex','wusir','ritian','egon','barry','barry'} 2 print(id(set1)) 3 set1.add('女神') 4 print(set1,id(set1)) 5 #update 6 set1.update('abc') 7 print(set1)
#删,pop(),随机删除,remove(),按元素删除 ,clear()清除元素,返回的是set() ,del删除整个集合
1 set1 = {'alex','wusir','ritian','egon','barry','barry'} 2 set1.pop() #随机删除 3 print(set1.pop()) #有返回值 4 print(set1) 5 set1.remove('alex') #按元素删除 6 print(set1)
7 set1.clear()
8 print(set1)
9 del set1
#查,没有索引,没有键值对,只能通过for循环类查询,而且每次查询的排序是不一样的
1 set1 = {'alex','wusir','ritian','egon','barry','barry'} 2 for i in set1: 3 print(i)
#交集,&,intersection(),重叠的部分
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 set3 = set1 & set2 4 print(set3) 5 print(set1.intersection(set2))
#并集,| ,union(),全部整和在一起而且不重复
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 print(set1 | set2) 4 print(set2.union(set1))
#反交集,^,symmetric_difference()就是集合各自双方没有的元素
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 set3 = set1 ^ set2 4 print(set3) 5 print(set1.symmetric_difference(set2))
#差集,- ,独有的
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 set3 = set1 - set2 4 print(set3)
#子集,<,issubset(),超集,>,issuperset()
1 set1 = {1,2,3,} 2 set2 = {1,2,3,4,5,6,7,8} 3 print(set1 < set2) 4 print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集 5 6 print(set2 > set1) 7 print(set2.issuperset(set1)) #这两个相同,都是说明set2是set1超集
#frozenset()不可变数据类型,让集合变不可变集合,可以循环查看
1 s = frozenset('barry') 2 print(s,type(s))
#去掉列表的重复元素
1 l1 = [1,2,33,33,44,55,1,3,4,2] 2 set1 = set(l1) 3 print(set1) 4 l1 = list(set1) 5 print(l1)
浙公网安备 33010602011771号