Day08
1、集合 set
集合是可变的容器
集合内的数据对象都是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后顺序关系
集合内的元素必须是比可变的对象
集合是可迭代对象
集合是相当于只有键,没有值的字典(键则是集合的数据)
创建空的集合:
Set()
创建非空集合:
S = {1, 2, 3}
集合的构造函数(创建)set
Set()创建一个空的集合对象(不能用{ }来创建空集合)
Set (itetable|)用可迭代对象创建一个新的集合
示例;
S = set( ) #空集合
S = {1,2,3,4}
S= set(“ABC”) # s = {‘A’,’B’, ‘C’}
S= set(“ABCCCBA”) # s = {’B’, ‘A’ ‘C’}
S= set ({1:”一”,2:“二”,3:“四” }) #s= {1,2,3}
集合的运算:
交集,并集,补集,子集,超集,对称补集
& | - < > ^
& 生成两个集合的交集
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但不属于s3 的所有元素的集合
^对称补集
S1 = {1,2,3}
S2 = {2,3,4}
S3 = s1 ^ s2 # s3 = {1,4}
>判断一个集合是另一个集合的超集
< 判断一个集合是另一个集合的子集
S1 = {4,5,6}
S2 = {4,5}
S1 > s2 # Ture s1是s2的超集
S2< s1 # Ture s2是s1的子集
== != 判断集合是否相等
{1, 2, 3} =={2, 3, 1} #Ture
{1,2} != {3, 4} # Ture
<= >= 判断包含,被包含关系
in / not in 运算符
判断一个元素是否存在于集合中(同其它容器类型的in相同)
not in 与in 相反
集合和字典的优点;’
In / not in 运算符的查找速度快
集合的内建函数操作:
Len(x) max(x) min(x) sum(x)any(x)all(x)
练习:
经理有:曹操,刘备,孙权
技术员:曹操,孙权,张飞,关羽
用集合求:
1, 即是经理也是技术员的人有谁?
2, 是经理,但不是技术员的人有谁?
3, 是技术员,不是经理的都有谁?
4, 张飞是经理吗?
5, 身兼一职的人都是谁?
6, 经理和技术员共有几个人?
j = {'曹操','刘备','孙权'}
jsy = {'曹操','孙权','张飞','关羽'}
print('即使经理也是技术员的人是:',j & jsy)
print('是经理,但不是技术员的人是:',j - jsy)
print('是技术员,不是经理的人是:',jsy - j)
zf = '张飞'
if '张飞'in jsy:
print(zf,'不是经理')
else:
print(zf,'是经理')
print('身兼一职的人是:',j ^ jsy)
print('经理和技术员共有%d个人'%len (j|jsy))
集合是可迭代对象:
用for语句可以得到集合中国的全部数据元素
S = {1,“二”,3.14,“Four”}
For x in s:
Print(x)
集合推导式:
集合推导式是用可迭代对象生成集合的表达式
语法:
{表达式 for 变量 in 可迭代对象 [ if 真值表达式]}
注:[ ] 括起来的部分代表可以省略
练习:
写一个程序,任意输入一篇英文文章(可能有多行)当输入空行时结束输入
1. 判断出现英文单词的种类数
比如:the world
The dream (种类数是3)
#答案
# L = []
# while True:
# s = input("请输入: ")
# if not s:
# break
# L.append(s)
# print("您输入了%d行文字" % len(L))
# L2 = []
# for s in L:
# for ch in "0123456789’():“”–.,":
# s = s.replace(ch, ' ')
# print("====> : ", s)
# L2.append(s)
# print(L2)
# words_set = set() # 创建一个空集合,把所有词放进去
# for s in L2:
# words = s.split() # 把字符串分拆成字符串列表
# for w in words:
# words_set.add(w) # 把所有单位加到集合内
# print("单词个数:", len(words_set))
# print(words_set)
固定集合 frozenset
固定集合是不可变的,无序的,含有唯一元素的集合
作用:
固定集合可以作为字典的键,也可以做为集合的值
创建空的固定集合:
Fz = frozenset()
创建非空的固定集合:
Frozenset(iterable)用可迭代对象创建集合
例:
Fz = frozenset([2, 3, 5, 7])
固定集合的运算:
同set 运算完全一致
& 交集,| 并集,-补集,^ 对称补集,
Ø >= < <= == !=
In , not in
固定集合的方法:
相当于集合的全部方法去掉修改集合的方法
前8天的总结:
数据类型:
不可变的类型:
Bool,int,float,complex,str,tuple,frozenset,bytes(后面会讲)
可变的数据类型:
List,dict,set,bytearray(后面会讲)
值:
Nome,False,True
运算符:
+ - * / // % **
>1 >= < <= == !=
Not and or
In ,not in
& | ^
+ ( 正号) -(负号)
表达式:
100
100+200
Len([1,2,3])+ max([1,2.3])#函数 调用是表达式
Print(“hello”)
条件表达式:x if x > y lese y
全部的推导式:[ x for x in range (5) ]
(列表,字典,集合推到式三种)
语句:statement
表达式语句:
Print(‘hello world’)
‘hello’
赋值语句:
A = 100
A = b = c = 200
X, y, z, = 100, 200, 300
If 语句
While 语句
For 语句
Continue 语句
Pass 语句
Del 语句
内建函数:
Len(x)
Max(x)
Min (x)
Sum(x)
Sny(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 (…)
详见:
>>> help(_builtins_)
3、函数 function
什么是函数:
函数是可以重复执行的语句块,可以重复调用
作用:
用于封装语句,提高代码的重要性
用于定义(创建)用户级别的函数
语法:
Def 函数名(行参数列表):
语句块
说明:
1.函数的名就是语句快的名称
2.函数名非命名规则与变量名相同(函数名必须是标识符)
3.函名是一个变量
4.函数有自己怕名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量,要让函数处理外部数据需要用参数给函数传入一些数据
5.参数列表可以为空
6.语句部分不能为空,如果为空需要用pass语句填充
示例:
Def say_ hello():
Print(‘hello,world‘)
Print(‘hello,tarena ‘)
Print(‘hello,python‘)
#调用函数:
Say_hello()打印结果如下:
#Print(‘hello,world‘)
#Print(‘hello,tarena ‘)
#Print(‘hello,python‘)
函数调用:
函数名(实际调用传递参数)
说明:
函数调用是一个表达式
如果没有return语句,函数执行完毕后返回None对象
如果函数需要返回其它的对象需要用return语句
示例:
#此示例意函数的传参:
def mymax(a,b):
print('用户传给我的第一个参数a是',a)
print("b =",b)
#调用mymax
mymax(100,200)
输出
#用户传给我的第一个参数a是 100
#b = 200
练习:
用def语句定义一个函数,此函数接收两个实参
1) 在函数内打印出两个实参的和
2) 在函数内打印两个实参的最小值
# def myfun(a,b):
# print('这两个数的和为:',a+b)
# if a < b:
# print('最小值为',a)
# else:
# print('最小值为',b)
# myfun(100,200)
# myfun(50,300)
练习:
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
答案
#1:
names = {'小张', '小李', '小赵', '老冯'}
S = set() # 此集合用来保存未到者的名单
for n in names:
result = input(n + "来了没有: ")
if result == 'y':
pass
else:
S.add(n)
print('未到者名单:', S)
#2:
# def print_even(n):
# for x in range(2,n+1):
# if x % 2 == 0:
# print(x,end = ' ')
# print()
# print_even(16)