Python学习之集合(set)的功能、定义和实例讲解
程序员文章站
2024-01-10 00:00:10
集合(set)-字典的近亲
集合的两大功能:
集合可以实现去重的功能 集合可以实现关系测试; 交集, 差集,并集, 是否子集, 是否没有交集
集合(set)的定义
集合是不...
集合(set)-字典的近亲
集合的两大功能:
集合可以实现去重的功能 集合可以实现关系测试; 交集, 差集,并集, 是否子集, 是否没有交集
集合(set)的定义
集合是不重复的数据结构 如果花括号里面为空,则是字典类型
s = { } print type(s) #
定义集合的第一种方式
s = {1,2,3,4} print type(s) #
定义集合的第二种方式
s = set() print type(s) # s = set([1,2,3,1,2,3]) print s #set([1, 2, 3]) s = set("hello") print s #set(['h', 'e', 'l', 'o']) s = set((1,2,3,4,5)) print s #set([1, 2, 3, 4, 5]) s = set({'a':1, 'b':2, 'c':3}) #set(['a', 'c', 'b'])
集合的特性
集合是无序的, 不重复的数据类型; 因此不支持索引,也不支持切片;也不支持重复;也不支持连接; 支持成员操作符; 支持for循环;
#支持成员操作符 s = {1, 2, 3, 4, 1, 2} print 1 in s #True print 2 not in s #False
#集合支持for循环,是可迭代的 s = {1,2,3,2,1,5,6} for i in s : print i , #1 2 3 5 6
集合的增删改查
增加
s = {1,2,3,4,1,2,3} print s #set([1, 2, 3, 4]) s.add(1) #set([1, 2, 3, 4]) s.add(7) print s #set([1, 2, 3, 4, 7])
s = {1,2,3,2,1,5,6} s1 = {'a', 'b', 'c'} s.update(s1) print s #set(['a', 1, 2, 3, 5, 6, 'c', 'b'])
查找(关系测试操作)
数学关系
s1 = {1, 2, 3, 4} s2 = {1, 2, 3, 5} # 交集 print s1 & s2 #set([1, 2, 3]) # 并集 print s1 | s2 #set([1, 2, 3, 4, 5]) # 差集 print s1 - s2 #set([4]) print s2 - s1 #set([5]) # 对等差分 print s1 ^ s2 #set([4, 5])
集合方法
s1 = {1, 2, 3, 4} s2 = {1, 2, 3, 5} # 交集 print s1.intersection(s2) #set([1, 2, 3]) # 并集 print s1.union(s2) #set([1, 2, 3, 5]) # 差集 print s1.difference(s2) #set([4]) print s2.difference(s1) #set([5]) # 对等差分 print s1.symmetric_difference(s2) #set([4, 5]) #补充update s1 = {1, 2, 3, 4} s2 = {1, 2, 3, 5} print s1.intersection_update(s2) #set([1, 2, 3])
删除
pop( ) 随机删除s = {'a','hello', 'redhat', 'b', 18, 33, 4, 1, 2, 7, 6, 5} print s #set(['a', 1, 2, 'b', 4, 5, 6, 7, 18, 'redhat', 33, 'hello']) print s.pop() #a
remove( ) 删除集合指定元素, 如果不存在,则报错
s = {'alice','hello', 'westos', 'b', 18} s.remove('alice') print s #set([18, 'b', 'westos', 'hello'])discard( ) 删除集合指定元素, 如果不存在,则do nothing
s = {'alice','hello', 'westos', 'b', 18} s.discard("a") print s #set([18, 'b', 'westos', 'alice', 'hello'])clear( ) 清空集合元素
s = {'alice','hello', 'westos', 'b', 18} s.clear() print s #set([])
应用:
(华为机试题)题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性, 他先用计算机生成了N个1到1000之间的随机整数(N≤1000), N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应 着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺 序去找同学做调
查。请你协助明明完成“去重”与“排序”的工作; 提示:
#生成随机数 import random random.randint(1,1000) #列表的去重
代码如下:
import random s = set() N = input('输入一个数:') for i in range (N) : s.add(random.randint(1,1000)) # sorted 是内置方法, 用来排序; print sorted(s) #通过列表排序 # li = list(s) # li.sort() # print li
总结
可变数据类型: 列表, 字典, 集合 不可变数据类型: 数值类型, 字符串, 元组
可变数据类型实现某个功能, 直接改变可变的数据类型; 不可变数据类型实现某个功能,需要将结果赋值给另外一个变量; 是否实现for循环
可迭代数据类型: str, list, tuple, dict, set 不可迭代数据类型:数值类型 是否支持索引,切片, 重复和连接特性
有序的数据类型: str, list, tuple 无序的数据类型: dict, set
上一篇: 十年怕井绳!俄罗斯研发能扫描辐射的无人机
下一篇: 简单工厂模式-工厂方法模式