集合操作 - 字典的近亲
集合的两个功能:
1.集合可以实现去重的功能;
2.集合可以实现关系测试; 交集, 差集,并集, 是否子集, 是否没有交集........
s = {1, 2, 3, 2, 3}
工厂法定义(工厂方法定义集合时, 括号里面是可迭代的对象, eg: 数值类型不可以)
定义一个空的集合;
s = set("hello")
s = set((1,2,3,4,5))
因此不支持索引,也不支持切片;也不支持重复;也不支持连接;
• 列表去重
• 关系测试:如交集、差集、并集的关系测试
list_2.difference(list_1)
list_1 - list_2
• 父集 list_1.issuperset(list_2)
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性, 他先用计算机生成了N个1到1000之间的随机整数(N≤1000), N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应 着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺 序去找同学做调查。请你协助明明完成“去重”与“排序”的工作;
提示:
生成随机数,
import random
random.randint(1,1000)
列表的去重
代码如下:
集合的两个功能:
1.集合可以实现去重的功能;
2.集合可以实现关系测试; 交集, 差集,并集, 是否子集, 是否没有交集........
集合set的定义
集合是不重复的数据结构;s={} #如果花括号里面为空,则是字典类型;
s = {1, 2, 3, 2, 3}
工厂法定义(工厂方法定义集合时, 括号里面是可迭代的对象, eg: 数值类型不可以)
定义一个空的集合;
s = set()
s = set("hello")
s = set((1,2,3,4,5))
s = set({'a':1, 'b':2, 'c':3})
集合的特性
集合是无序的, 不重复的数据类型;因此不支持索引,也不支持切片;也不支持重复;也不支持连接;
支持成员操作符;
支持for循环;
set的应用场景
集合是一个无序的,不重复的数据组合。• 列表去重
• 关系测试:如交集、差集、并集的关系测试
集合的关系测试操作
• 交集: list_1.intersection(list_2)list_1 & list_2
list_1 | list_2
list_2.difference(list_1)
list_1 - list_2
list_2 - list_1
list_1 ^ list_2
• 父集 list_1.issuperset(list_2)
• 有无交集 list_1.isdisjoint(list_2)
集合的添加
s.add(1) #在集合中添加一项s.update([1,3,4]) #在集合中添加多项,跟的参数应该是可迭代类型
集合的删除
•s.remove(1) #删除集合中指定的元素
• s.pop() #随机删除集合中的某个元素,并返回删除的元素
集合的其他操作
• len(s) #显示集合set的长度"1" in s #检测某元素是否为集合s的成员,返回布尔值
s.clear() #清空集合的所有元素
应用:
(华为机试题)题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性, 他先用计算机生成了N个1到1000之间的随机整数(N≤1000), N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应 着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺 序去找同学做调查。请你协助明明完成“去重”与“排序”的工作;
提示:
生成随机数,
import random
random.randint(1,1000)
列表的去重
代码如下:
#!/usr/bin/env python
#coding:utf-8
import random
s=set()
N=input("请输入一个整数N:")
for i in range(1,N+1):
i=random.randint(1,1000)
s.add(i)
li=list(s)
li.sort()
print li