Python_day04--集合set
一、集合的定义
set集合,是一个无序且不重复的元素集合。
集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。
1、集合元素是不可重复的;
s = {1,2, 3, 1, 2, 3}
print(s)
2、列表去重;
names = ['hello', 'world', 'hello']
print(list(set(names)))
3、集合的特性: (索引, 切片, 重复, 连接,)===> 不支持, 因为无序; 成员操作符, for循环 ===> 支持;
4、集合是无序的数据类型: 添加元素的顺序和存储的顺序无关;
s = {1,2,3,33,44,55}
1).print(s)
s.add(22)
print(s)
2).成员操作符
print(1 in s)
3).for循环
for i in s:
print(i, end='')
5、添加元素
1).增加单个元素;
s = {'b','3','a']
print(s)
s.add(4)
print(s)
2).增加多个元素;
s.update({ 5, 6})
print(s)
6、删除指定元素
s.remove(1)
print(s)
7、 随机删除集合元素
s = {1,2,3,4,5,6,7,8,9}
s.pop()
print(s)
8、清除集合中所有元素
s.clear()
print(s)
9、去重
s = {1, 2, 3, 1, 2, 3}
print(s)
# 去重
li = [1, 2, 3, 1, 2, 3]
print(list(set(li)))
10、求集合的交集、并集
s1 = {1, 2, 3}
s2 = {1, 2, 4}
print("并集:", s1.union(s2))
print("交集:", s1.intersection(s2))
# 求交集时, 把s1的值更新为交集的值;
s1.intersection_update(s2)
print(s1)
11、s1-(s1 and s2 的交集)
print(s1.difference(s2)) # s1-instersection(s1,s2)
print(s2.difference(s1)) # s2-intersection(s1,s2)
12、求差集时, 把s2的值更新为差集的值;
print(s2.difference_update(s1)) # s2-union(s1,s2)
print(s2)
13、对等差分;
s1 = {1, 2, 3,5}
s2 = {1, 2, 4,6}
print(s1.symmetric_difference(s2))
14、
print(s1 | s2)
print(s1 & s2)
print(s1 - s2)
print(s2 - s1)
15、子集、父集:
s1 = {1, 2, 3,5}
s2 = {1, 2, }
1)s1是s2的子集?
print(s1.issubset(s2))
2)s1是s2的父集?
print(s1.issuperset(s2))
3)s1和s2没有交集么? 如果没有交集True,否则返回False;
print(s1.isdisjoint(s2))
16、练习:(华为机试题)题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000), N是用户输入的,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作;
# 在1-1000之间随机生成10个数字
random.sample(range(1,1000), 10)
import random
N = int(input("N:")) #将input接收的str,转化为int类型;
s = set() # 定义空集合时, 不能为s={}, 应该是s = set()
for i in range(N): # 4, (0,1,2,3)
num = random.randint(1,1000)
s.add(num) # 将随机生成的数加入到集合中;
print(sorted(s)) # 对集合进行排序;
17、练习:集和练习
集合练习:
随机产生2组各个数字的列表,每组10个数字,如下要求:
每个数字取值范围[10,20]
统计20个数字中,一共有多少个不同的数字? # {1,2,3} {2,3,4} # 并集
2组中,不重复的数字有几个?分别是什么?{1,2,3} {1,2,4} # 对等差分;
2组中,重复的数字有几个?分别是什么?