day10集合

集合 set
1.特点
1.集合是可变的容器:
2.集合内的数据对象都是唯一的(不能重复多次)
3.集合是无序的存储结构,集合中的数据没有先后顺序关系
4.集合内的元素必须是不可变的对象
5.集合是可迭代对象
6.集合是相当于只有键没有值的字典(键则是集合的数据)
2.0创建空的集合:
set()
2.0创建非空的集合
s = {1,2,3}
3.集合的构造函数(创建):
set()   创建一个空的集合对象,(不能用{}来创建空集合)
set(interable) 用可迭代对象创建一个新的集合
示例:
s = set()
s = {1,2,3,4}
s = set("abc")    s = {a,b,c}
s = set("abcba")  s = {a,b,c}
s = set({1:"一",2:"二",3:"三",4:"四",5,"五"}) s = {1,2,3,4,5}
s = set([1,2,3,2])  # s = {1,2,3} 
4.集合的运算:
交集 &  生成两个集合的交集
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 & s2 >>> s3 = {2,3}
并集 |  生成两个集合的并集
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 | s2 >>> s3 = {1,2,3,4}
补集 -  生成两个集合的补集
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 - s2 >>> s3 = {1}  生成属性s1但不属性s2的集合
s3 = s2 - s1 >>> s3 = {4}  生成属性s2但不属性s1的集合
子集 <  判断一个集合是另一个集合的子集
超集 >  判断一个集合是另一个集合的超集
s1 = {4,5,6}
s2 = {4,5}
s1 > s2 # True s1 是s2的超集
s1 < s2 # True s1 是s2的子集
== != 判断集合是否相同
{1,2,3} = {2,3,1}   # True
{1,2}  != {3,4}   # False
<= >= 判断包含和被包含的关系
对称补集 ^ 
s1 = {1,2,3}
s2 = {2,3,4}
s3 = s1 ^ s2 >>> s3 = {1,4}
in / not in 运算符:判断一个元素是否存在于集合中(同其他容器类型的in相同)
not in 与 in相反
集合和字典的优点:
1.in/not in运算符的查找速度快
集合的内建函数操作:
len(x),max(x),min(x),sum(x),any(x),all(x)
----------------------------------------------------------------------------------------------------------------------
练习
1.经理有:曹操 刘备,孙权
2.技术员有:曹操,孙权,张飞,关羽
用集合求:
1.既是经理也是技术员的人是谁
2.是经理,但不是技术员的是谁
3.是技术员,不是经理的都有谁
4.张飞是经理吗?
5.身兼一职的人都有谁
6.经理和技术员共有几个人
------------------------------------------------------------------------------------------------------------------
manger = {"曹操","刘备","孙权"}
it = {"曹操","孙权","张飞","关羽"}
s = manger & it
print(s)
s1 = manger - it
print(s1)
s2 = it - manger
print(s2)
if "张飞" in manger:
    print("是经理")
else:
     print("不是经理")
s3 = manger & it
print(manger ^ it)
print(len(manger|it))
5.集合的常用方法:
1.S.add(e) 在集合中添加一个新的元素e;如果元素已经存在,则不添加
2.S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误
3.S.discard(e) 从集合S中移除一个元素e,在元素e不存在时什么都不做;
4.S.clear() 清空集合内的所有元素
5.S.copy() 将集合进行一次浅拷贝
6.S.pop() 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常
7.S.update(s2) 用 S与s2得到的全集更新变量S
8.S.difference(s2) 用S - s2 运算,返回存在于在S中,但不在s2中的所有元素的集合
9.S.difference_update(s2) 等同于 S = S - s2
10.S.intersection(s2) 等同于 S & s2
11.S.intersection_update(s2) 等同于S = S & s2
12.S.isdisjoint(s2) 如果S与s2交集为空返回True,非空则返回False
13.S.issubset(s2) 如果S与s2交集为非空返回True,空则返回False
14.S.issuperset(...) 如果S为s2的子集返回True,否则返回False
15.S.symmetric_difference(s2) 返回对称补集,等同于 S ^ s2
16.S.symmetric_difference_update(s2) 用 S 与 s2 的对称补集更新 S
17.S.union(s2) 生成 S 与 s2的全集
----------------------------------------------------------------------------------------------------
6.集合是可迭代对象:
用for语句可以得到集合中的全部数据元素
s = {1,"二",3.14,"Four"}
for x in s:
print(x)
7.集合推导式:
集合推导式是用可迭代对象生成集合的表达式:
语法:
{表达式 for 变量 in 可迭代对象 [if  真值表达式]}
注:[]括起来的部分代表可省略
s = {x ** 2 for x in range(10)}
集合推导式嵌套:推导式内的for 子句可以嵌套
--------------------------------------------------------------------------------------------------------------------
练习:
写一个程序,任意输入一篇英文文章(可能有多行),当输入空行时,结束输入,判断出现英文单词的种类
the world
the dream (种类3)
--------------------------------------------------------------------------------------------------------------------
l = []
while True:
     str = input("请输入一串单词")
     if str == "":
        break
     l += str.split(" ")
s = set(l)
print(s)
print("您输入的单词的种类为",len(s))
===========================================================================
固定集合Frozenser
固定集合是不可的,无序的,含有唯一元素胡集合
作用:
固定集合可以作为字典的键,也可以作为集合的值
创建空的固定集合:
fz = frozenset()
创建非空胡固定集合:
frozenset(iterable)用可迭代对象创建集合
示例:fz = frozenset([2,3,5,7])
固定集合的运算:
同set运算完全一致;
& 交集,| 并集,-补集,^对称补集 < > >= <= == != in/not in
固定集合的方法 :
相当于集合的全部方法去掉修改集合的方法:
============================================================================
总结:
数据类型:
不可变的数据类型
bool int float complex str tuple frozenset bytes(后面讲)
可变的数据类型:
list dict set bytearray(后面会讲)
值:None False True
运算符:
1.+ - * / // % **
2.> >= < <= == !=
3.not and or
4.in/not in
5.& | ^
6.+ (正号) - (符号)
表达式:
100
100+200
len([1,2,3]) + max([1,2,3])  函数调用表达式
print("hello")
条件表达式:x if x > y else y
全部的推导式:[x for x in range(5)]   (列表 字典 集合推导式三种)

语句:
表达式语句:
print("hello Word")
'hello'
赋值语句:
a = 100
a = b = c =200
x , y , z  = 100,200,300
if 语句
while 语句
for 语句
break 语句
continue 语句
pass 语句
del 语句
内建函数:
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
构造函数:
bool(x)
int(x,base=10)
float(x)
complex(real=0,image=0)
str(x)
list(x)
tuple(x)
dict(x)
set(x)
frozenset(x)
数字处理函数:
abs(x)
round(x)
pow(x,y,z=0)
字符串相关函数:
bin(x)
Oct(x)
hex(x)
chr(x)
ord(x)
迭代器相关:
range(start,stop,step)
reversed(x)
sorted(x)
输入输出相关(
input(x)
print(x)
详见help (__builtins__)
============================================================================
函数 function:
1.函数是可以重复执行的语句块,可以重复调用
2.作用:用于封装语句,提高代码的重用性;用于定义用户级别的函数
3.语法: def 函数名 (形参列表)
语句块
4.说明:
函数的名子就是语句块的名称;
函数名的命名规则与变量名相同(函数名必须是标识符)
函数名是一个变量
函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变,要让函数处理外部数据需要用参数给函数传入一些数据
函数列表可以为空
语句部分不能为空,如果为空需要用pass语句填充
5.函数调用:
函数名(实际调用传递参数)
说明:函数调用一个表达式:
如果没有return 语句,函数执行完毕后返回None对象,如果函数需要返回其他的对象,需要用到return语句
--------------------------------------------------------------------------------------------------------------------------------
练习:
用def语句定义一个函数myfun,此函数接收两个实参,1.在函数内打印出两个实参的和
2.在函数内打印两个实参的最小是
--------------------------------------------------------------------------------------------------------------------------------
def myfun(a,b):
    he = a + b
    print("两个数之和为",a+b)
    if a > b:
       print("最小值为",b)
    else:
       print("最小值为",a)
#调用函数
myfun(10,20)
myfun("abc","123")
============================================================================
练习:
1.已知全班学生的名单,存于集合中names
写一个点名签到的程序,随机输出学生的姓名,让用户输入,"y"代表已到,输入"n"或其他代表未到,当点名结束后,打印未到者名单
2.写一个函数print_even,传入一个参数,n代表终止数,此函数调用将打印2,4,6,8,.....n,之间所有的偶数,函数定义如下:
def print_even(n):
测试调用:
  print(8)
2,4,6,8
print(15)
2,4,6,8,10,12,14
3.看懂sutdent_information的内容,并能够自己独立实现功能























































猜你喜欢

转载自blog.csdn.net/robin13438235412/article/details/80754031
今日推荐