目录
集合set, 固定集合frozenset
& | - ^ < >
>= <= == !=
in not in
s.add()
s.remove()
s.discard()
s.clear()
s.pop() 删除随机一个
...
集合是可迭代对象
集合推导式
列表: [x for x in range(10)]
集合: {x for x in range(10)}
字典: {x:x**2 for x in range(10)}
函数 function
def 语句语法:
def 函数名(形参列表):
语句块
作用:创建函数
函数调用:
函数名(实参列表)
renter 语句
集合 set
集合是可变的容器
集合内的数据对象都是唯一的(不能重复多次)
集合是无序的存储结构, 集合中的数据没有先后关系
集合内的元素必须是不可变对象
集合是可迭代对象
集合是相当于只有键没有值的字典(键则是集合的数据)
创建空集合
s = set()
创建非空集合
s = {1, 2, 3}
s = {3.14, True, (1970,1,1), "hello"} 集合里不可加列表,字典,集合(可变)
>>> s = {1, 2, 3}
>>> s
{1, 2, 3}
>>> type(s)
<class 'set'>
>>> l=[6, 8, 10]
>>> s = {6, 8, 10}
>>> z = {}
>>> type(z)
<class 'dict'>
>>> s = set()
>>> type(s)
<class 'set'>
集合的构造函数 set
set() 创建一个空的集合对象(不能用{} 创建集合)
set(iteerable) 用可迭代对象创建一个新的集合对象
例:
s = {1, 3, 5, 7}
s = set("ABC")
s = set("ABCCBA")
>>> s = set("ABCCBA")
>>> s
{'A', 'C', 'B'}
set({1:'1', 2:'2', 5:'5'})
>>> set({1:'1', 2:'2', 5:'5'})
{1, 2, 5}
s = set([1, 0, 3.14, "hello"])
>>> s = set([1, 0, 3.14, "hello"])
>>> s
{0, 1, 3.14, 'hello'}
s = set(('abc', '123', True))
>>> s = set(('abc', '123', True))
>>> s
{'123', True, 'abc'}
集合的运算:
交集 &
并集 |
补集 -
子集 <
超集 >
对称补集 ^
& 生成两个集合的交集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2 #s3 = {2, 3}
| 并集 集合 D.update(D2) 将D2合并D, 同取D2的值做新值
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 #生成输入属于s1 但不属于s2
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s3 = s1 - s2
>>> s3
{1}
>>> s4 = s2 - s1
>>> s4
{4}
^ 对称补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2
#(s1 - s2) | (s2 - s1)
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s3 = s1 ^ s2
>>> s3
{1, 4}
> 判断一个集合是另一个的超集
< 判断一个集合是另一个的子集
s1 = {1, 2, 3}
s2 = {2, 3}
s1 > s2
s2 < s1
>>> s1 = {1, 2, 3}
>>> s2 = {2, 3}
s1 > s2
True #s1 为s2 的超集
>>> s1 < s2
False #s2 为 s1 的子集
== != 集合相同不同
s1 = {1, 2, 3}
s2 = {3, 2, 1}
s1 == s2
>>> s1 = {1, 2, 3}
>>> s2 = {3, 2, 1}
>>> s1 == s2
True
in / not in 运算符
等同于字典的in, not in, 作于集合中, 判断某个值是否存在于集合中
集合和字典的优点:
in / not in 运算的判断比列表的速度快
能用于集合的函数:
len(x), max(x), min(x), sum(x), any(x), all(x)
练习:
经理有:曹操, 刘备, 孙权
技术员:曹操, 孙权, 张飞, 关羽
用集合求:
1)即是经理, 也是技术员的
2)是经理, 但不是技术员的
3)是技术员, 不是经理
4)张飞是经理吗?
5)身兼一职
6)经理和技术员共几个

1 a = {'曹操','刘备','孙权'} 2 b = {'曹操','孙权','张飞','关羽'} 3 c = a & b 4 print('即是经理, 也是技术员的', c) 5 d = a -b 6 print('是经理, 但不是技术员的', d) 7 e = b - a 8 print('是技术员, 不是经理', e) 9 f = '张飞'in a 10 if f == True: 11 print('张飞是经理') 12 else: 13 print('张飞不是经理') 14 g = a ^ b 15 print('身兼一职', g) 16 f = a | b 17 print('经理和技术员共%d个' % len(f))
Python3 集合的常用方法
方法 意义
S.add(e) 在集合中添加一个新的元素e;如果元素已经存在,则不添加 (列表insert +)
>>> s = set()
>>> s
set()
>>> s.add(100)
>>> s
{100}
>>> s.add(200)
>>> s.remove(100)
>>> s
{200}
S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误
S.discard(e) 从集合S中移除一个元素e,在元素e不存在时什么都不做;
S.clear() 清空集合内的所有元素
S.copy() 将集合进行一次浅拷贝
S.pop() 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常
>>> s = {2, 1, 4, 7, 8, 9}
>>> s
{1, 2, 4, 7, 8, 9}
>>> s.pop()
1
>>> s.pop()
2
>>> s.pop()
4
>>> s.pop()
7
>>> s.pop()
8
>>> s.pop()
9
>>> s.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'
S.update(s2) 用 S与s2得到的全集更新变量S (+=)
>>> s = {1, 2, 3}
>>> s
{1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s = s | s2 #s.update(s2) #s |=s2
>>> s
{1, 2, 3, 4}
>>> s = {1, 2, 3}
>>> s2 = {2, 3, 4}
>>> s |= s2
>>> s
{1, 2, 3, 4}
S.difference(s2) 用S - s2 运算,返回存在于在S中,但不在s2中的所有元素的集合
S.difference_update(s2) 等同于 S = S - s2
S.intersection(s2) 等同于 S & s2
S.intersection_update(s2) 等同于S = S & s2
S.isdisjoint(s2) 如果S与s2交集为空返回True,非空则返回False
S.issubset(s2) 如果S与s2交集为非空返回True,空则返回False
S.issuperset(...) 如果S为s2的子集返回True,否则返回False
S.symmetric_difference(s2) 返回对称补集,等同于 S ^ s2
S.symmetric_difference_update(s2) 用 S 与 s2 的对称补集更新 S
S.union(s2) 生成 S 与 s2的全集
python 只有三种推导式 字典{:}列表[]集合{}
集合推导式
集合推导式是用可迭代对象生成集合的表达式
语法:
{表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注:[]可略
例:
l =[1, 3, 5, 7, 2, 4, 6, 8, 1, 3, 5] #字典有:
s = {x for x in l}
>>> l =[1, 3, 5, 7, 2, 4, 6, 8, 1, 3, 5]
>>> s = {x for x in l}
>>> s
{1, 2, 3, 4, 5, 6, 7, 8}
>>> d = { x: x for x in l}#字典
>>> d
{1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8}
推导式嵌套:
语法同列表同
>>> l =[1, 3, 5, 7, 2, 4, 6, 8, 1, 3, 5]
>>> s = {x for x in l if x % 2==0}
>>> s
{8, 2, 4, 6}
练习:
任意输入一些数字, 存于列表L中, 当输入负数时结束输入
1)打印和
2)打印这些数有多少种(去重)
3)去重后, 打印这些剩余数字的和

1 l = [] 2 while True: 3 a = int(input("请输入数字:") 4 if a < 0: 5 break 6 else: 7 l.append(a) 8 print(l) 9 print('这些数的和:', sum(l)) 10 s = set(l) 11 print('这些数有%d种' % len(s)) 12 he = sum(s) 13 print('去重后, 打印这些剩余数字的和%d' % he)
固定集合frozenset
固定集合是不变的, 无序的, 含有唯一元素的集合
作用:
固定集合可以作为字典的键, 还可以作为集合的值
固定集合的构造函数:
frozenset() 创建一个空的固定集合
frozenset(iterable) 可用迭代对象创建固定集合
>>> s = {1, 2, 3, frozenset({4.4, 5.5})}
>>> s
{1, 2, 3, frozenset({4.4, 5.5})}
>>> fz = frozenset()
>>> type(fz)
<class 'frozenset'>
>>> fz = frozenset({1, 3, 5, 7})
>>> s = {1, 3, 5, 7}
>>> s
{1, 3, 5, 7}
>>> fz
frozenset({1, 3, 5, 7})
运算:
交集 &
并集 |
补集 -
对称补集^
< <= > >= == !=
in /not in
(以上运算符和集合set 同)
固定集合的方法:
相当于集合的全部方法去掉添加, 删除(修改)集合的
方法
总结:
1.数据类型:
数值类型:(不可变的类型)
bool,int,float,complex,
容器:
不可变容器
str,tuple,frozenset,bytes
可变容器:
list,dict,set,bytearray
2.值:
None,False,True
运算符:
算术运算符:
+ - * / // % **
比较运算符:
> >= < <= == !=
in , not in
is , is not
布尔运算:
not , and , or
+(正号) -(负号)
& | ^
[ ] (索引,切片,键索引)
表达式:
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)]
(列表,字典,集合推导式三种)
语句:statement
表达式语句:
所有的表达式都可以单独写一行,形成一个语句,例:
print("hello world")
1 + 2
赋值语句:创建和修改变量
a=100
a=b=c=200
x,y,z=100,200,300
a[0] = 100
dict['name'] = 'tarena'
del 语句
if 语句
while 语句
for 语句
break 语句
continue 语句
pass 语句
内建函数:
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=None)
字符串相关函数:
bin(x)
oct(x)
hex(x)
chr(x)
ord(x)
迭代器相关
range(start,stop,step)
reversed(x)
sorted(x)
输入输出相关:
input(x)
print(...)
bin(x), oct(x), hex(x)
chr(x), ord(x)
range(star, stop, step)
input(x), print(x), id(x)
>>> help(__builtins__)
函数function
函数名(实参...)
函数是可以重复执行的语句块, 可以重复调用
作用:
1.用于封装语句块, 提高代码的重用性
2.定义用户级别的函数
语法:
def 函数名(形参列表):
语句块
说明:
1.函数的名字就是语句块的名称
2.函数名的命名规则写变量名相同(函数名必须是标识符)
3.函数名是一个变量(不要轻易对其赋值)
4.函数有自己名字空间,在函数外部不可以访问函数内部的变量,在函数内 部可以访问函数外部的变量,但不能修改此变量.
(要让函数处理外部数据需要用参数给函数传入一些数据)
5.函数如果不需要传入参数,参数列表可以为空
6.语句部分不能为空,如果为空需要用pass语句填充
函数调用:
函数名(实际调用传递参数/实参)
注:实际调用传递参数,以后简称实参
函数名说明:
1.函数调用是一个表达式
2.如果函数内部没有return语句,函数调用完毕后返回None对象
3.如果函数需要返回其他的对象需要用到return语句
函数的调用
函数名(实际调用传递参数)
注:
实际调用传递参数, 简称实参

1 def say_hello(): 2 print('hello world!') 3 print('hello tarena!') 4 print('hello everyone!') 5 6 say_hello() # 调用函数 7 say_hello() 8 say_hello()

1 # 此示例示意带有形式参数的函数的定义 2 3 # 写一个函数,打印出给定的两个数的最大值 4 def mymax(a,b): 5 print('a =', a) 6 print('b =', b) 7 if a > b: 8 print(a, '最大') 9 else: 10 print(b, '最大') 11 12 mymax(100,200) 13 mymax(10,20) 14 mymax('ABC','123')

1 # 写一个函数myadd,此函数中的额参数列表里有两个参数x,y 2 # 此函数的功能是打印x+y的和 3 def myadd(x,y): 4 print(x + y) 5 6 myadd(100,200) # 300 7 print('ABC','123') # ABC123 8 myadd('ABC','123')

1 # 写一个函数mysum,传入一个参数x代表终止整数 2 # 打印出 1+2+3+4+...+x的和 3 4 def mysum(x): 5 i = 1 6 s = 0 # 创建变量用于累加 7 while i <= x: # for x in range(1,x+1): 8 s += i 9 i += 1 10 print(s) 11 12 mysum(100) # 5050 13 mysum(4) # 10
return 语句:
语法:
return [表达式]
注: [] 代表内容可省略
作用:
用于函数中,结束当前的函数的执行,返回到调用该函数的地方,同时返回 (表达式)一个对象的引用关系
return 语句说明:
1.return 语句后跟的表达式可以省略,省略后相当于return None
2.如果函数内没有return语句,则函数执行完最后一条语句后返回None (相当于在最后加了一条 return None 语句)

1 def say_hello(): 2 print('aaaaaa') 3 print('bbbbbb') 4 return None # 返回到调用此函数的地方 5 print('cccccc') 6 7 say_hello() 8 say_hello() 9 print("-------------------------") 10 def say_hello(): 11 print('aaaaaa') 12 print('bbbbbb') 13 return [1,2,3,4] # 返回到调用此函数的地方 14 print('cccccc') 15 16 v = say_hello() 17 print('v =',v)
函数的参数传递
传递方式:
位置传参
序列传参
关键字传参
字典关键字传参
练习

1 # 1.写一个函数 mymax,给函数传递两个参数,返回两个实参中最大的一个 2 def mymax(a,b): 3 if a > b: 4 # zuida = a 5 return a 6 else: 7 # zuida = b 8 return b 9 # return zuida 10 11 v = mymax(100,200) 12 print('v =',v) # v = 200 13 print(mymax('ABC','abc')) #abc

1 def mymax(a,b): 2 if a > b: 3 return a 4 return b 5 6 v = mymax(100,200) 7 print('v =',v) # v = 200 8 print(mymax('ABC','abc'))

1 def mymax(a,b): 2 return max(a,b) 3 4 v = mymax(100,200) 5 print('v =',v) # v = 200 6 print(mymax('ABC','abc'))
写一个函数 input_number ,此函数用来获取用户循环输入的整数
,当用户输入负数时结束输入.将用户输入的数字以列表的形式返回,再用
内建函数 max,min,sum 取出用户输入的最大值,最小值及和

1 def input_number(): 2 lst = [] 3 while True: 4 n = int(input("输入整数")) 5 if n < 0: 6 break 7 lst.append(n) 8 return lst 9 10 L= input_number() 11 print(L) # 打印此列表 12 print("用户输入的最大数是:",max(L)) 13 print("用户输入的最小数是:",min(L)) 14 print("用户输入的数的和是:",sum(L))
写一个函数 print_odd,打印从begin开始,到end结束(不包含end)内的全部奇数

1 def print_odd(begin,end): 2 l = [] 3 for i in range(begin,end): 4 if i % 2 == 1: 5 l.append(i) 6 print(l) 7 8 print_odd(1,10) # 打印 1,3,5,7,9 9 print_odd(10,20) # 打印 11,13,15,17,19
定义两个函数:
sum3(a,b,c)用于'返回'三个数的和
pow3(x)用于'返回'x的三次方
用以上函数计算:
1)计算1的立方+2的立方+3的立方的和
2)计算 1+2+3 的和的立方
即:(1+2+3) **3 的和

1 def sum3(a, b, c): 2 return(a + b + c) 3 4 # sum3(1, 2, 3) 5 6 def pow3(x): 7 return(x**3) 8 9 print(sum3(pow3(1), pow3(2), pow3(3))) 10 print(pow3(sum3(1, 2, 3)))
改写之前的学生信息管理程序
改写两个函数
1)写一个函数 input_student() 用于返回学生信息的字典的列表
(以前格式一样)
2)写一个函数 output_stedent() 此函数传入一个列表lst ,
即字典的列表
此函数把lst 的内容以及表格形式打印出来

1 def input_student(): 2 3 4 def output_student(lst): 5 6 7 L = input_student() # 获取学生信息的列表 8 output_student(L) # 把L 以列表的形式打印 9 10 11 def input_student(): 12 l = [] 13 while True: 14 name = input('请输入姓名:') 15 if not name:#如果名字为空, 结束 16 break 17 age = input("请输入年龄:") 18 score = input('请输入成绩:') 19 d = {} 20 d['name'] = name 21 d['age'] = int(age) if age != "" else "death" 22 d['score'] = int(score) if score != "" else "" 23 l.append(d) 24 return(l) 25 26 27 28 def output_student(lst): 29 print('+--------------------+--------------+-------------+') 30 print('| name | age | score |') 31 print('+--------------------+--------------+-------------+') 32 for d in lst: 33 n = d["name"].center(20) 34 a = str(d['age']).center(14) 35 s = str(d['score']).center(13)#'-'的数量 36 print("|%s|%s|%s|" % (n, a, s)) 37 print('+--------------------+--------------+-------------+') 38 39 # | xiaozhang | 20 | 100 | 40 # | xiaoli | 18 | 98 | 41 # +--------------------+--------------+-------------+ 42 43 l = input_student() 44 output_student(l)