python集合&函数一

集合(set)

集合和列表基本一致
集合和列表的不同点

  • 集合只能存储不可变对象
  • 集合中存储的对象是无序的
  • 集合中不能出现重复的元素

创建集合

1. {}
s = {1, 2, 3, 4, 5, 6}
print(s,type(s))
# {1, 2, 3, 4, 5, 6} <class 'set'>
s = {[1, 2, 3], [4, 5, 6]}
print(s)
# TypeError: unhashable type: 'list'
# 集合只能存储不可变对象,列表是可变对象
s = {1, 2, 3, 4, 5, 6}
s1 = {7, 1, 2, 3, 4, 5, 6}
s2 = {1, 2, 3, 4, 5, 6, 6, 1, 2, 3}
print(s)
print(s1)
print(s2)
# {1, 2, 3, 4, 5, 6}
# {1, 2, 3, 4, 5, 6, 7}  集合中存储的对象是无序的
# {1, 2, 3, 4, 5, 6}  集合中的元素不可重复
  1. set()
s = set() # 创建空集合的方式
# s1 = set(1, 2, 3, 4, 5, 6) # 会报错,set()函数可以创建一个无序不重复的元素集,这个函数至多可以传一个参数
s2 = set('python') # str也是序列
s3 = set([1, 2, 3, 4, 5, 6]) # 将列表转换为集合
s4 = set({'a':1, 'b':2}) # 将字典转换成集合,只会包含字典的键
# s1[2] = 30  会报错,集合无序,如果想使用该方法,通过list将集合转换为列表
# out:
# set()
# {'n', 't', 'p', 'y', 'h', 'o'}
# {1, 2, 3, 4, 5, 6}
# {'a', 'b'}

集合的使用

in&not in
使用in 和 not in 来检查集合中的元素,结果会返回一个bool值

s = {'a', 'b', 1, 2, 3}
print('b' in s)
# True

len()
获取集合中元素的个数(长度)

s = {'a', 'b', 1, 2, 3}
print(len(s))
# 5

add()
可以向集合中添加元素

s = {'a', 'b', 1, 2, 3}
s.add(4)
print(s)

updata
讲一个集合中的元素添加到当前集合中

s = {'a', 'b', 1, 2, 3}
s2 = {'miss', 'you'}
s.updata(s2)
print(s2)
# {1, 'b', 3, 2, 4, 'a'}

pop
随机删除集合中的一个元素,返回被删除的元素

s = {'a', 'b', 1, 2, 3}
info = s.pop()
print(info)
print(s)
# 1
# {2, 3, 'b', 'a'}

remove
删除集合中指定的元素

s = {'a', 'b', 1, 2, 3}
info = s.remove(1)
print(info)
print(s)
# None
# {2, 3, 'a', 'b'}

clear
清空集合

s = {'a', 'b', 1, 2, 3}
s.clear()
print(s)
# set()

集合的运算

&交集运算,|并集运算,-差集运算,^亦或集

s = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
info = s & s2 # 交集运算
print(info)
union = s | s2 # 并集运算
print(union)
diff = s - s2 # 差集运算
diff2 = s2 - s
print(diff)
print(diff2)
or_set = s ^ s2 # 亦或集
print(or_set)
# {3, 4, 5}
# {1, 2, 3, 4, 5, 6, 7}
# {1, 2}
# {6, 7}
# {1, 2, 6, 7}

<= 包含于
检查一个集合是否是另一个集合的子集,结果返回boll值
<
检查一个集合是否是另一个集合的真子集
如果集合A是集合B的子集,并且集合B不是集合A的子集,那么集合A叫做集合B的真子集(proper subset)。如果A包含于B,且A不等于B,就说集合A是集合B的真子集。

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
info = a <= b
print(info) 
c = {1, 2, 3} <= {1, 2, 3}
print(c)
d = {1, 2, 3} < {1, 2, 3}
print(d)
# True
# True
# False

>=
超集 检查一个集合是否是另一个集合的超集
>
真超集 检查一个集合是否是另一个集合的真超集

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
info = b >= a
print(info)
c = {1, 2, 3} >= {1, 2, 3}
print(c)
d = {1, 2, 3} > {1, 2, 3}
print(d)
True
True
False

函数(function)

简介

  • 函数也是一个对象
  • 对象是内存中专门用来存储数据的一块区域
  • 函数用来保存一些可以执行的代码,并且可以再需要的时候对这些语句多次调用

创建函数

def 函数名([形参1, 形参2, 形参3....]):
    代码块

def first():
    print('hello function')
print(first)
# <function first at 0x0000027D73AA67B8>
first()    
# hello function

0x0000027D73AA67B8 是一串16进制数据,函数在内存中也是已数字的方式存储的
first是函数对象 first()调用函数

函数的参数

  • 在定义函数的时候,可以在函数名后面的括号里面定义数量不等的形参
  • 多个形参用逗号隔开
  • 形参(形式参数),定义形参就是相对于在函数内部定义了变量,但没有赋值
  • 实参(实际参数),函数定义时指定了形参,那么调用函数的时候也必须传递实参
    • 实参将会赋值给对应的形参,有几个形参就传几个实参,否则报错

定义一个函数实现任意两个数的和

def sum(a,b):
    print(a, '+', b,'=', a+b) 
sum(12,16)
# 12 + 16 = 28

函数的传递方式

  1. 位置传参
    位置传参就是对应位置的实参传递给对应位置的形参
  • 定义形参的时候我们可以为形参指定一个默认值
  • 指定了默认值以后,如果用户传递了参数,默认值是不会有任何作用的
  • 如果用户没有传递实参,则默认值会生效
def fn(a, b, c=10):
   print('a =',a)
   print('b =',b)
   print('c =',c)
fn(12)    
fn(1, 2, 3)  
# a = 1
# b = 2
# c = 10
# a = 1
# b = 2
# c = 3  
  1. 关键字传参
  • 可以不按照形参定义的顺序去传参,而是根据参数名来传递参数
  • 可与位置传参混合使用,但是位置参数必须写在关键字参数前
def fn(a, b, c=10):
    print('a =',a)
    print('b =',b)
    print('c =',c)
fn(b=1, c=2, a=3)
fn(1, 2, c=9)  
# a = 3
# b = 1
# c = 2
# a = 1
# b = 2
# c = 9  

实参的类型

  • 函数在调用的时候,解释器不会检查实参的类型
  • 实参的类型可以是任意的对象
def fn(a, b):
    print(a + b)
fn(1, 1) 
# 2   

在参数中对形参重新赋值不会影响其他的变量

def fn(a):
    a = 10
    print('a = ', a)
c = 20
fn(c)
print('c=', c)    
# a =  10
# c= 20

如果形参在执行的时候,当我们通过形参去修改对象时,会影响到指向对象的变量

def fn(a):
    a[0] = 5
    print('a = ', a)
c = [1, 2, 3]
fn(c)
print('c=', c) 
# a =  [5, 2, 3]
# c= [5, 2, 3]   

若我不想影响指向对象的变量

def fn(a):
    a[0] = 5
    print('a = ', a, id(a))
c = [1, 2, 3]
fn(c.copy())
print('c=', c, id(c))   

总结:
如果你向函数内部传递一个参数而不影响函数外部,你需要传入一个可变序列的副本,不可变的不需要担心影响外部。

不定长参数

*参数
用于处理位置参数
装包
在定义函数的时候,可以在形参前面加上一个*,这样这个形参将会获取所有的参数,且保存到一个元组当中

def fn(*a):
    print('a=', a, type(a))
fn()
fn(1, 2, 3, 4) 
# a= () <class 'tuple'> 若什么都不传,则产生一个空元组
# fn(1, 2, 3, 4) 

定义一个函数实现任意数的和

def sum(*a):
    info = 0 # 定义一个变量保存结果
    for n in a:
        info += n
    print(info)
sum(1, 2, 3, 4, 5, 6)
# 21        

可变长参数不是必须写到最后,但需要注意的是,后的参数,必须是关键字传参,否则,所有多余的元素会已元组的形式存储在b中,c没有实参

def sum(a, *b, c=6):
    print(a)
    print(b)
    print(c)
sum(1, 2, 3, 4, 5, 6) 
# 1
# (2, 3, 4, 5, 6)
# 6  

若果在形参的开头直接写一个*,但是所有的参数要以关键字的形式来传递

def fn(*, a, b, c):
    
    print(a)
    print(b)
    print(c)
fn(a=6,b=7,c=8)     

**形参

  • 用于处理关键字参数
  • 可以接受其他的关键字参数,它会将这些参数统一保存到一个字典当中,字典当中的key是参数的名字,字典中的value是参数的值
  • 只能有一个,并且必须写在最后
def fn(b, c, **a):
    print('a=', a)
fn(a = 4, b = 1, c = 2, d = 5, e = 6)  
# a= {'a': 4, 'd': 5, 'e': 6}
# b= 1
# c= 2  

参数解包

  • 解包时,序列中的元素的个数必须和形参的个数一致
def fn(a, b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)
t = (1, 2, 3)
d = {'a':10, 'b':20, 'c':30}
fn(*t)    
fn(**d)
# a = 1
# b = 2
# c = 3
# a = 10
# b = 20
# c = 30

字典解包
**d

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python提供了丰富的集合函数,以下是其中一些常用的函数: 1. 创建集合 使用`set()`函数可以创建一个空集合,也可以将其他序列类型转换为集合类型。 ```python # 创建空集合 set1 = set() print(set1) # 输出:set() # 将列表转换为集合 list1 = [1, 2, 3, 4, 5] set2 = set(list1) print(set2) # 输出:{1, 2, 3, 4, 5} ``` 2. 添加元素 使用`add()`方法可以向集合中添加一个元素,使用`update()`方法可以向集合中添加多个元素。 ```python set1 = {1, 2, 3} set1.add(4) print(set1) # 输出:{1, 2, 3, 4} set1.update([5, 6, 7]) print(set1) # 输出:{1, 2, 3, 4, 5, 6, 7} ``` 3. 删除元素 使用`remove()`方法可以删除集合中的一个元素,如果元素不存在则会抛出异常。使用`discard()`方法也可以删除集合中的一个元素,但如果元素不存在则不会抛出异常。 ```python set1 = {1, 2, 3, 4, 5} set1.remove(3) print(set1) # 输出:{1, 2, 4, 5} set1.discard(4) print(set1) # 输出:{1, 2, 5} ``` 4. 集合运算 Python提供了多种集合运算,包括并集、交集、差集等。 ```python set1 = {1, 2, 3} set2 = {3, 4, 5} # 并集 set3 = set1.union(set2) print(set3) # 输出:{1, 2, 3, 4, 5} # 交集 set4 = set1.intersection(set2) print(set4) # 输出:{3} # 差集 set5 = set1.difference(set2) print(set5) # 输出:{1, 2} ``` 5. 判断是否有交集 使用`isdisjoint()`方法可以判断两个集合是否有交集,如果没有交集则返回True,否则返回False。 ```python set1 = {1, 2, 3} set2 = {4, 5, 6} set3 = {3, 4, 5} print(set1.isdisjoint(set2)) # 输出:True print(set1.isdisjoint(set3)) # 输出:False ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值