Python基本数据结构之集合

一道python面试的一个小问题,说怎么使用一行代码将一个列表里的重复元素,其实这里只要将列表转换成集合就可以了。

定义

集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,

 

    1. 里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存

 

    1. 天生去重,在集合里没办法存重复的元素

 

    1. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合

 

基于上面的特性,我们可以用集合来干2件事,去重和关系运算

1 li=[1,1,'li']
2 a=set(li)  # 可变集合/‘
3 print(a)
4 b=set('xiaohu 123')
5 print(b)  # set是无序不重复的 # 如果要取值 1、for循环 2、迭代器

集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
集合当中的交(
1、 & 2、集合中的方法intersection()并(1、 | 2、 集合中的方法union()补(1、- 2、集合中的方法difference()差(集合中的方法symmetric_difference()
 1 pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']
 2 linuxs=['wupeiqi','oldboy','gangdan']
 3 
 4 # 求既报名python,也报名linux的学生 ,这是用for循环实现两个集合的交集-----------------------------------------------------
 5 l=[]
 6 for item in pythons:
 7     if item in linuxs:
 8        l.append(item)
 9 print(l)
10 
11 # 求报名了python,没有报名linux的学生-----------------------------------------------------------------------------------
12 l=[]
13 for item in pythons:
14     if item not in linuxs:
15         l.append(item)
16 print(l)
17 
18 # 求所有报名的孩子的集合 1、 |   2、 集合中的方法union()----------------------------------------------------------------
19 a=set(pythons)
20 b=set(linuxs)
21 s=a | b #  求两个集合的并集
22 print(s)
23 print(a.union(b)) # 和 | 效果一样,求两个集合的并集
24 
25 #  求两个集合的交集 1、 &  2、集合中的方法intersection()----------------------------------------------------------------
26 a=set(pythons)
27 b=set(linuxs)
28 s= a & b
29 print(s)
30 print(a.intersection(b))
31 
32 # 求补集----------------------------------------------------------------------------------------------------------------
33 a=set(pythons)
34 b=set(linuxs)
35 print(a-b) # {'biubiu', 'yuanhao', 'egon', 'alex'}
36 print(a.difference(b)) # {'biubiu', 'yuanhao', 'egon', 'alex'}
37 print(b-a) # {'oldboy'}
38 print(b.difference(a)) # {'oldboy'}
39 
40 # 求没有同时报名python和linuxs的学生------------------------------------------------------------------------------------
41 a=set(pythons)
42 b=set(linuxs)
43 print(a^b)
44 print(a.symmetric_difference(b)) # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'}
45 print(b.symmetric_difference(a)) # {'oldboy', 'biubiu', 'yuanhao', 'egon', 'alex'}

 集合中  >,>=,<,<= 父集,子集 (返回布尔值)

 

 1 set1={1,2,3,4,5}
 2 set2={1,2,3,4}
 3 
 4 print(set1 >= set2)
 5 
 6 print(set1.issuperset(set2)) # 完全包含的意思
 7 
 8 print(set2 <= set1)
 9 
10 print(set2.issubset(set1)) # 子集

 

 

集合里的增与删

1、add()方法

1 set1.add(88)  # 88是一个整体
2 print(set1)
3 print(set1.pop())
4 print(set1)

  2、discard(),remove()方法

1 set1.discard(3) # 指定值删除
2 print(set1)
3 set1.remove(2) # 也是指定值删除
4 print(set1)
3、update()方法
1 set1.update('ops')  # 与add的区别是添加几个不重复的
2 set1.update([123,'ooo'])
3 print(set1)
4、clear()方法

1 set1.update('ops')  # 与add的区别是添加几个不重复的
2 set1.update([123,'ooo'])
3 print(set1)
在集合中添加元素用.add()方法,.pop方法不指定参数,随机删除,并且有返回值
单纯的删除:discard,remove 指定元素删除,元素不存在不报错,单纯的删除,没有返回值
update方法谁调用更新谁的集合
print(set('alex')==set('alexexex')) # 返回True
print(set('alex')<set('alexwwww'))  #  返回True 因为右边包含左边

  

 

 

 

 

posted @ 2019-08-08 22:01  Xiaohu_BigData  阅读(511)  评论(0编辑  收藏  举报