[python全栈]02.python基础[part II](2)

目录

  1. 集合
  2. 集合的运算、常用方法
  3. 集合的方法
  4. 集合推导式
  5. 固定集合
  6. 阶段总结
  7. 函数
  8. 函数的调用

1. 集合

集合 set :
	集合是可变的容器
	集合内的对象是唯一的(不能重复多次的)
	集合是无序的储存结构,集合中的数据没有先后关系
	集合内的元素必须是不可变对象
	集合是可迭代的
	集合是相当于只有键没有值的字典(键则是集合的数据)
创建空的集合 :
	s = set()	#set() 创建一个空的集合
创建非空集合 :
	s = {1,2,3}	#集合中的三个整数 1,2,3
集合的构造函数 set :
	set() 创建空集合
	set(iterable) 用可迭代对象创建一个新的集合对象
eg :
	s = set('ABCDABCABA')	#s = {'B', 'C', 'A', 'D'} 去除重复对象
	s = set({1:'一',2:'二',5:'五'})	#只获取字典的'键'
	s = set((2,3,5,7))
	s = set([1,2,[3.1,3.2],4])#错误,[3.1,3.2]是可变对象

2. 集合的运算、常用方法

集合的运算 : 交集,并集,补集,子集,超集
	'&' 生成两个集合的交集:
		s1 = {1,2,3}
		s2 = {2,3,4}
		s1 & s2	#>>>{2, 3}
	'|' 生成两个集合的并集 :
		s1 = {1,2,3}
		s2 = {2,3,4}
		s1 | s2	#>>>{1, 2, 3, 4}
	'-' 生成两个集合的补集 :
		s1 = {1,2,3}
		s2 = {2,3,4}
		s1 - s2	#>>>{1} 
		#生成属于s1但不属于s2的所有元素的集合
	'^'	生成两个集合的对称补集 :
		s1 = {1,2,3}
		s2 = {2,3,4}
		s1 ^ s2	#>>>{1,4}
		#等同于:(s1 - s2) | (s2 - s1)
	'<' 判断一个集合是否为另一集合的子集 	:
	'<=' 判断一个集合是否为另一集合的真子集 : 	
	'>' 判断一个集合是否为另一集合的超集 :
		s1 = {1,2,3}
		s2 = {2,3}	#s2是s1的子集,s2是s1的超集 
		s2 < s1 	#True
		s1 > s2 	#True
		s1 <= s1 	#True		
	'==' '!=' 集合相同/不同 :
		s1 = {1,2,3}
		s2 = {2,3,1}
		s1 == s2	#True
		s1 != s2	#False	 集合数据没有先后顺序
	in / not in 运算 :
		当某个元素存在于集合中,in 返回真,否则为假
		eg :
			s = {1,'Two',3.14}
			1 in s   	#True
			2 not in s 	#True
python3中可用于集合的函数:
	len(x); max(x); min(x); sum(x); 
	any(x); all(x)
集合是可迭代对象 :
	s = {1,2,3}
		for x in s :
			print(x)

3. 集合的方法

方法作用
s.add(e)在集合中添加一个新元素e;如果元素已存在,则不添加
s.remove(e)在集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误
s.discard(e)从集合中移除一个元素e,若e不存在无操作
s.clear()清空集合内的所有元素
s.copy()将集合进行一次浅拷贝
s.pop()从集合中删除一个随机元素;如果此集合为空,则提示KeyError
s.update(s2)用s与s2得到的全集更新变量s
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(s2)如果s为s2的子集则返回True, 否则返回False
s.symmetric_difference(s2)返回对称补集,同 s^s2
s.symmetric_difference_update(s2)用s^s2更新s
s.union生成s与s2的全集,同 s

4. 集合推导式

集合推导式 :用可迭代对象来创建(生成)集合的表达式
语法 :
	{表达式 for 变量 in 可迭代对象 [if 真值表达式]}
eg : s = {x**2 for x in range(10) if x % 2 == 0}
		#s>>>{0, 64, 4, 36, 16}
集合推导式的嵌套规则与列表推导式相同

练习 :

''' 模拟一个点名系统,已知全班学生名单,
随机打印学生的姓名进行点名,
并得到此学生是否已到信息,
输入'y'代表已到,其他输入代表未到
点名结束后打印未到者名单 '''
L = ['A','B','C','D','E','F','G']
s = set(L)
L2= []
for i in s :
    info = i + '已到? y/是'
    a = input(info)
    if a != 'y' :
        L2.append(i)
print('未到学生有: ',L2)

5. 固定集合

问题: 能否用集合做字典的键?
	>>>集合是可变对象,不能作为字典的键
固定集合 : frozenset 
	固定集合是不可变,无序的,唯一元素的集合
作用:固定集合可以作为字典的键,也可以作为集合的值
创建空的固定集合:
	fs = frozenset()
创建非空的固定集合 :
	fs = frozenset([1,2,3,4,5])
构造函数 :
	frozenset()
	frozenset(iterable)	#同set函数一致,返回固定集合
作用:作为字典的键和集合的值
eg :
	s = frozenset([1,2,3])
	s2 = {s, 4, 5, 6}
	d = {s,'ABC'}
	# s2 = {frozenset({1, 2, 3}), 4, 5, 6}
	# d = {frozenset({1, 2, 3}), 'ABC'}
固定集合的运算 :同集合运算方法一致
	& 交集: | 并集; - 补集; ^ 对称补集
	>; >=; <; <=; ==; !=
	in / not in 
固定集合的方法: s.方法名
	相当于集合的全部方法去掉修改集合(添加/删除)的方法

6. 阶段总结

6.1 数据类型 :
	不可变数据类型 :
	 	数值类(int,float,complex,bool),字符串(str)
	 	元组(tuple),固定集合(frozenset),字符串(bytes)
	可变数据类型 :
		列表(list),字典(dict),集合(set),字节数据(bytearray)
	特殊值 : None , True , False ...
6.2 运算符 :
	+ ; - ; * ; / ; // ; % ; **
	> ; >= ; < ; <= ; == ; !=
	is ; is not
	in / not in
	not ; and ; or
	& ; | ; ^	
	+(正号)	-(负号)
6.3 表达式 : 返回一个值或对象
	1
	1+2
	len()/min()/max()/any()/all()
	条件表达式 : x if x>y else y
	全部的推导式: 列表,字典,集合推导式(三种)
6.4 语句
	表达式语句 : 返回对象
		print('abc') ; 'hello'
	赋值语句 : 创建或修改变量,不能改变对象
		a = b = c =200
		x, y = 100, 200
	if 语句 ; 
	while 语句 ; for 语句 :
	break 语句 ; continue 语句 ; pass 语句 :
	del 语句
6.5 内建函数 :
		len() ; max() ; min() ; sum() ; any() ; all()
		-----------------------------------------------------
		bool() ; int() ; float() ; complex() ; str() ;tuple() ;
		frozenset() ; list() ; dic() ; set() ;
		-----------------------------------------------------
		abs(x) ; round(x) ; pow(x,y,z)
		-----------------------------------------------------
		bin(x) ; oct(x) ; hex(x) ; chr(x) ; ord(x)
		-----------------------------------------------------
		range([start,]stop[,step])
		-----------------------------------------------------
		input() ; print()

7. 函数

函数 function :
	函数是可以重复执行的语句块,可以重复使用
作用 :
	1.用于封装语句块,提高代码的重用性
	2.定义用户级别的函数
函数定义(创建)语句 def 语句的语法 :
	def 函数名(形参列表) :
		语句块
说明 :
	1.函数的名字就是语句块的名称
	2.函数名的命名规则与变量名相同(函数名必须为标识符)
	3.函数有自己的名字空间,在函数外部不可以访问函数内部的变量,
		在函数内部可以访问函数外部的变量,
		通常让函数处理外部数据需要用参数给函数传入一些数据
	4.函数的参数列表可以为空
	5.语句部分不能为空,如果为空需要填充pass语句
eg :
#定义函数
def say_hello() :
	print('hello world')
	print('hello python')
	print('hello everyone')
#调用say_hello函数
say_hello()

8. 函数的调用

函数名(实际调用传递参数列表)
	注:实际调用传递参数 即 实参
说明 :
	1.函数调用是一个表达式
	2.如果没有return语句,此函数执行完毕后返回None对象
		如果函数需要返回其他的对象需要用到return语句
eg:
def mymax(a,b) :
	print('a = ',a)
	print('b = ',b)
	if a > b :
		print(a,'大于',b)
	else :
		print(a,'小于等于',b)
#调用该函数
mymax(1,2)

练习 :

'''
1)写一个isprime(x)函数,判断x是否为素数,如果是返回True,否则返回False
2)写一个函数prime_m2n(m,n),返回m开始到n结束(不包含n)的范围内的素数列表
3)写一个函数primes(n),返回制定范围内素数(不包含n)全部素数的列表,并打印这些素数
	1.打印100以内的全部素数
	2.打印100以内全部素数和
'''
def isprime(x):
    if x <= 1 :
        return False
    for j in range(2,x):
        if x % j == 0 :
            return False     
    return True

def prime_m2n(m,n):
    L=[]
    for i in range(m,n):
        if isprime(i) :
            L.append(i)
    return L

#直接使用列表推导式:
#def prime_m2n(m,n):
    #return [x for x in range(m,n) if isprime(x)]

def primes(n):
    return prime_m2n(0,n)

print(primes(100))
print('100一以内素数的和为:',sum(primes(100)))

练习:

'''
写一个函数mysum(),要求给出一个数n,
求1+2+3+...+n 的和
print(mysum(100))	#5050
print(mysum(10))	#55
'''
def mysum(n) :
	s = 0
	for x in range(1,n+1):
		s += x
	return s
print(mysum(100))
'''
写一个myfac(n)来计算n!(n的阶乘)
n!=1*2*3*...*n
print(myfac(5))	#120
'''
def myfac(n):
    fac_n = 1
    for i in range(1,n+1):
        fac_n *= i
    return fac_n
print(myfac(5))
'''
写一个函数,求1+2**2+3**3+...+n**n的和
'''
def sq_sum(n):
    sq_sum = 0
    for i in range(1,n+1):
        sq_sum += i**i
    return sq_sum
print(sq_sum(3))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值