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)

 

posted on 2018-09-10 17:39  smile大豆芽  阅读(117)  评论(0)    收藏  举报