python-集合-函数

集合 set

集合是可变容器

集合内的数据对象是唯一的(不能重复多次的)

集合是无序的存储结构,集合中的顺序没有先后关系

集合的元素必须是不可变对象、

集合是可迭代的

集合是相当于只有键没有值的字典(键则是集合的数据)

创建空的集合、

s= set()

创建非空集合

set={1,2,3} 集合中的三个整数1,2,3

集合的构造函数 set

set 创建空集合

set(iterable)用可迭代对象创建一个新的集合对象

示例:

s=set(“ABC”)

s=set(“ASFSSDFDG”) #会去掉重复的

s=({“1”:“dsf”,“2”:“ssf”})

s=set([1,2,2.13,False])

s=set((1,2,3))

s=set([1,2,[3.1,3.2],4]) 错的,嵌套的列表是可变列表

集合的运算

-------------不支持改,只能先删除,再添加

交集 并集 补集 子集 超集

& 生成两个集合的交集

s1={1,2,3}

s2={2,3,4}

s3=s1&s2

| 生成两个集合的并集

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,4} 等同于 (S1-S2) | (S2-S1)

< 判断一个集合是否是另一个集合的子集

,>判断一个集合是否是另一个集合的超集

s1={1,2,3}

s2={1,2}

s2<s1 True 判断子集

s1>s2 True 判断 超集

== != 判断集合相同或者不同

s1={1,2,3}

s2={2,3,1}

s1==s2 True 集合的数据没有先后顺序关系 元素个数相同 元素值相同

s1!=s2 False

in / not in 运算符

等同于字典,in 运算符 用于集合中,当某个值存在于集合中,则为真,否则为假

not in 与 in 返回值相反、

示例:

s={1,“Two”,3.14}

1 in s True

2 in s False

3.14 not in s False

4 not in s True

python3 当中 可以用于集合的函数

len(x) max(x) min(x) sum(x) any(x) all(x)

练习

经理: 曹操 刘备 周瑜

技术员 :曹操 周瑜 张飞 赵云

用集合求:

1,是经理也是技术的集合

2,是经理但不是技术员的集合

3,是技术员,但不是经理的集合

4张飞是经理吗

5,身兼两职的的集合

6,经理和技术员共有几人

思考:

集合是可变对象,有方法能添加,删除集合的数据吗

集合的方法

s=set()

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

s1={1,2,3}

s2={2,3,4}

s=s1

s1|=s2 对于可变对象,不等同于s1+=s2

print(s) {1,2,3}

s1=s1|s2

print(s) {1,2,3,4}

对于不可变对象,复合赋值运算符不等同于 运算后再赋值

s1 |= s2 不等于

s1=s1 | s2

练习:

任意输入一个单词,存入集合中,当输入空字符串时结束输入

1)打印输入的单词种类数(去重)

2)每个单词都打印到终端上显示

l=[]
s=set()
while 1:
    i=input("请输入单词:")
    if i=="":
        break 
    if i not in l:
        l.append(i)
s=set[l]
for x in s:
    print(x)
集合推导式

用可迭代对象创建(生成)集合表达式

语法:

{表达式 for 变量 in 可迭代对象 [if 真值表达式] }

[] 括号部分内容可以省略

示例:

L=[2,3,5,7,3,5,7,11]

s={x**2 for x in L} s={4,9,25,49…}

集合推导式的嵌套规则与列表推导式相同

练习:

1.模拟一个点名系统,已知全班学生名单,随机打印学生的姓名进行点名,并得到此学生是否已到信息,输入“y”代表已到,其他输入代表为到场

点名结束后打印未到者名单

问题:

能用集合能作为字典的键?
只能是不可变的-----固定集合

固定集合 frozenset

固定集合是不可变的,无序的,含有唯一元素的集合

可以作为字典的键

作用:

​ 固定集合可以作为字典的键,也可以作为集合的值

创建空的固定集合

fs=frozenset()

创建非空的固定集合

fs=frozenset([2,3,5,7])

构造函数:

frozenset()

frozenset(iterable) 同set函数一致,返回固定集合

固定集合的运算:

&

|

^

,> >= < <= == !=

in /not in

(以上规则等同于set中的用法)

固定集合的方法:

相当于集合的方法去掉修改集合的方法

阶段总结:

不可变数据类型

bool int float complex str tuple frozenset bytes

可变数据类型:

list dict set bytearrey(字节数组)

值:

None True False …

数字值为0 为false

容器类的为空时 false

运算符:

, + - / // % **

,> >= < <= == !=

is is not

in not in

not and or

& | ^

,+(正号) -(负号)

表达式

1

1+2

len([1,2,3])

条件表达式 x if x>y else y

全部的推导式:

列表,字典,集合推导式(三种)

表达式语句

print

赋值语句 不能改变对象(只是在 创建变量和改变变量)

a=100

a=b=c=200

x,y=100,200

if 语句

while语句

for 语句

break 语句

continue 语句

pass语句

del语句

内建函数

len()

max()

min()

any()

all()

sum()


bool()

int()

float()

complex()

str()

list()

tuple()

dict()

set()

frozenset()


abs(x)

raw(x)

pow(x,y)


bin(x)

oct(x)

hex(x)

chr(x)

ord(x)


range([start, ]stop[ ,step]) 可迭代对象


input()

print()

函数:function

函数是可以重复执行的语句块,可以重复使用

作用:

1.用于封装语句块,提高代码的重用性

2.定义用户级别的函数

函数定义(创建)语句 def语句的用法:(define)def关键字

def函数名 (形参列表):
(函数名和变量名的命名规则相同,自定义)

(此处有四个空格)语句块

说明:

  1. 函数的名字就是语句块的名称
  2. 函数名的命名规则与变量名相同(函数名必须为标识符)必须是字母或下滑线开头,后面跟字母下划线和数字,且不能是关键字
  3. 函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量,通常让函数处理外部数据需要用参数给函数传入一些数据
  4. 函数的参数列表可以为空
  5. 语句部分不能为空。如果为空需要填充pass语句

期中考试------重点考查range函数 for函数

示例:

def say_Hello():
    print("hello world!")
    print("good morning!")
    print("how are you?")
say_Hello()
#函数绑定着语句块,冒号和括号不能丢,函数如果不调用,就不会执行。

每一个函数代表着一个功能

函数的调用

函数名(实际调用传递参数列表)

注:实际调用传递参数以后叫做实参

说明:

函数调用是一个表达式,如果没有return语句,此函数执行完毕后偶返回None对象,

如果函数需要返回其他的对象则需要用到return语句

# 1、写一个程序,输入一些单词和解释,将单词作为键,将解释作为值,将这些数据存于字典中

# 然后,输入查询的单词,显示出此单词的解释

d=dict()
while 1:
    i=input("请输入单词(直接回车结束):")
    if not i:
        break
    e=input("请输入解释:")

# d={x:b[a.index(x)] for x in a }
    d[i]=e
while 1:
    c=input("请输入要查询的单词:")
    if c==x:
        print("解释:",d[x])
    else:
        print("单词不存在!")

练习:

1.写一个函数myfun,此函数用显示两个参数的相关信息

函数:

​ def myfun(a,b):

​ 此处自己实现

此函数给定两个参数,打印关于两个参数的信息:

1)打印两个 参数的最大值

2)打印两个参数的和

3)打印两个参数积

4)打印从a开始到b结束的所有偶数

如: myfun(3,10)

打印如下:

最大值:10

和:13

积:30

3到10之间的偶数:4,6,8,10

def myfun(a,b):
    a=int(input("一天看几页书:"))
    b=int(input("一天吃几个水果:"))
    print("最大值是:",max(a,b))
    print("和为:",a+b)
    print("乘积为:",a*b)
    l=[]
    for x in range(min(a,b),max(a,b)):
        if x%2==0:
            l.append(x)
    print(min(a,b),"到",max(a,b),"之间的偶数有:",l)

myfun(10,4)

2.猴子吃桃,有一只小猴子,摘了很多桃,第一天吃了全部桃子的一半,感觉不饱又吃了一个

第二天吃了剩下的一半,感觉不饱又吃了一个

。。。一次类推

到底10天,发现只剩一个了

请问第一天摘了多少桃子?

x=1
y=0
while y<10:
    x=(x+1)*2
    y+=1
print(x)
#答案:第一天摘了3070个桃子

3.完全数

1+2+3=6(完全数)

因为 1,2,3都为6的因数(能被一个数x整除的数为y,则y为x的因数)

1 x 6=6

2 x 3 =6

w完全数是指除了自身以外所有因数只和等于自身的数

求4–5个完全数并打印

答案: 6 28 496

x=0
s = []  # 存完全数
while 1:
    x+=1
    sum=0
    l=[]#存因数
    for i in range(1,x):
        if x%i==0:
            l.append(i)
    if len(l)==1:
        continue
    else:
        for j in l:
            sum+=j
        if sum ==x:
            s.append(x)
            print("完全数是:",x)
        if len(s)==4:
            break
        # 答案:6,28,496,8128

猜你喜欢

转载自blog.csdn.net/weixin_43409365/article/details/83109057