元组:
一组有序数据的组合。元组不可以修改。
元组的定义:
-
空元组:
- 变量 = () 或者 变量= tuple()
-
单个元素的元组
变量 = (值,) -
具有多个数据的元组
-
变量 = (值,值…) 或者 变量 = tuple(容器数据)
基本操作:
-
变量 = (值,值…) 或者 变量 = tuple(容器数据)
只可以使用索引访问元组,不可以进行其他操作。
tuple1=(“你”,“我”,“他”,(“你得”,“我的”))
print(tuple1[3][1])
分片: 操作和列表一致。
tuple1=(“你”,“我”,“他”,(“你得”,“我的”))
print(tuple1[0:2:2])
常用函数
max() 获取元组中的最大值
min() 获取元组中的最小值
len() 获取元组的长度
tuple() 创建元组或者将其他数据转化为元组
元组的遍历: 同列表一样,嵌套元组和嵌套列表也一致
tuple1=(“你”,“我”,“他”,(“你得”,“我的”))
for name in tuple1:
for i in name:
print(i)
元组推导式:
元组推导式的结果不是元组,而是生成器(生成器需要操作才会得到结果)
语法同列表推导式一样
基本推导式: 结果变量 = (变量 for 变量 in 元组)
from collections import Iterator
res=(i*i for i in range(6))
print(res,type(res))
print(isinstance(res,Iterator))
print(next(res))
print(next(res))
print(next(res))
print(next(res))
for i in res:
print(i)
print(tuple(res))
元组除了不能修改和删除,其他的和列表相关操作一模一样,
元组函数可以使用 index 和 count,只能是元组相关的获取操作
比如更改,删除,排序,翻转,清空都不可以
tuple=(1,2,3,4,5)
res=tuple.index(2)
print(res)
tuple=(1,2,3,4,5,2,2)
res=tuple.count(2)
print(res)
元组推导式是生成器(generator)
定义:生成器是特殊的迭代器,可以自定义.按照某种算法推算下一个数据,只需往内存里存一个生成器,节省空间
语法:(1)里面是推导式,外面是()的是生成器
(2)含有yield关键字的函数是生成器函数,它可以返回一个迭代器,换句话说,生成器是一个返回迭代器的函数。
def func():
yield 1
print(“一次”)
yield 2
print(“二次”)
yield 3
print(“三次”)
res=func()
print(next(res))
print(next(res))
print(next(res))
for i in res:
print(i)
print(tuple(res))
yield 有点像 return
共同点在于:执行到这句话会把值返回出去
不同点在于:再次执行生成器时会从上一次yield执行的位置继续向下走,它会记住上一次离开时的状态.
每次返回,都会记住当前代码执行的位置,再次调用的时候会从上次位置继续向下执行
集合
确定的一组无序数据的组合。
特征:
1.由多个数据组成的复合型数据(容器类数据) 2.集合是没有顺序的
集合的操作:
1.创建集合
空集合 变量 = set()
具有多个数据的集合 变量 = {数据,数据,数据…}
1.集合创建时如果存在相同的数据,集合会只保留一份。
2.集合可以存放的数据类型有Number,String,Tuple,冰冻集合类型
集合没有添加,获取,删除及修改的【基本操作】!
集合的序列操作:由于集合数据比较特殊,集合操作非常少
成员检测
in
数据 in 集合
not in
数据 not in 集合
集合的序列函数:
len() 检测容器的长度
max() 获取容器中的最大值
min() 获取容器中的最小值
set() 创建空集合或者将其他数据类型转换为集合
集合的遍历操作: 只能使用for…in 来遍历集合
set={1,2,4,5,6,8,10}
for i in set:
print(i)
集合的推导式/集合内涵:
普通的集合推导式: 变量 = {变量 for 变量 in 集合}
res={i
2 for i in {1,2,3,4}}
print(res)
带有判断条件的集合推导式
变量 = {变量 for 变量 in 集合 if 条件表达式}
res={i
2 for i in {1,2,3,4,5,9,10} if i%2==0}
print(res)
多循环的集合推导式:
变量 = {变量1和变量2的操作 for 变量1 in 容器 for 变量2 in 容器}
res={i*j for i in range(1,5) for j in range(2,3)}
print(res)
带有判断条件的多循环推导式:
变量 = {变量1和变量2的操作 for 变量1 in 容器 for 变量2 in 容器 if 条件表达式}
集合专用的函数:
add() 向集合中添加一个元素/数据
格式:集合.add(数据)
返回值:None
注意:操作直接修改原有集合。
set1={1,2,3,4,5,6}
set1.add(7)
print(set1)
pop() 随机删除集合中的一个元素/数据
格式:集合.pop()
返回值:随机删除的数据
注意:操作直接修改原有集合。
set1={1,2,3,4,5,6}
set1.pop()
print(set1)
remove() 删除指定的数据,数据不存在会报错
格式:集合.remove(数据)
返回值:None
注意:操作直接修改原有集合。
set1={1,2,3,4,5,6}
set1.remove(1)
print(set1)
discard() 删除指定的数据,数据不存在不进行操作
格式:集合.discard(数据)
返回值:None
注意:操作直接修改原有集合。
set1={1,2,3,4,5,6}
set1.discard(1)
print(set1)
clear() 清空集合
格式:集合.clear()
返回值:None
注意:操作直接修改原有集合。
set1={1,2,3,4,5,6}
set1.clear()
print(set1)
copy() 复制集合
格式:集合.copy()
返回值:None
注意:复制的集合和原集合内容一样,但是不是一个集合
set1={1,2,3,4,5,6}
set2=set1.copy()
set1.add(7)
print(set1)
print(set2)
#集合运算符:
& 交集
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set1&set2
print(res)
| 并集
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set1|set2
print(res)
- 差集
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set1-set2
print(res)
^ 对称差集
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set1^set2
print(res)
#集合运算函数:
差集:difference() *
格式:集合1.difference(集合2)
返回值:差集的集合
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.difference(set1)
print(res)
更新差集:difference_update()
格式:集合1.difference_update(集合2)
返回值:None
注意:所谓更新差集,就是计算差集之后将结果重新赋值给第一个集合的变量而已
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
set2.difference_update(set1)
print(set2)
交集:intersection()
格式:集合1.intersection(集合2)
返回值:交集的集合
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.intersection(set1)
print(res)
更新交集:intersection_update()
格式:集合1.intersection_update(集合2)
返回值:None
注意:更新交集,就是计算交集之后将结果重新赋值给第一个集合的变量
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
set2.intersection_update(set1)
print(set2)
并集:union()
格式:集合1.union(集合2)
返回值:并集结果
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.union(set1)
print(res)
更新并集:update()
格式:集合1.update(集合2)
返回值:None
注意:更新并集,就是计算并集之后将结果重新赋值给第一个集合的变量
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
set2.update(set1)
print(set2)
对称差集:symmetric_difference()
格式:集合1.symmetric_difference(集合2)
返回值:对称差集的集合
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.symmetric_difference(set1)
print(res)
更新对称差集运算:symmetric_difference_update()
格式:集合1.symmetric_difference_update(集合2)
返回值:None
注意:计算对称差集的结果直接更新到集合1的变量当中
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
set2.symmetric_difference_update(set1)
print(set2)
检测是否是超集:issuperset()
格式:集合1.issuperset(集合2)
返回值:布尔值
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.issuperset(set1)
print(res)
检测是否是子集:issubset()
格式:集合1.issubset(集合2)
返回值:布尔值
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.issubset(set1)
print(res)
检测是否不相交的函数: isdisjoint()
格式:集合1.isdisjoint(集合2)
返回值:布尔值
注意:集合不相交结果为True,集合相交,结果为False
set1={1,2,3,4,5,6}
set2={3,4,5,6,7,9,10}
res=set2.isdijoint(set1)
print(res)
冰冻集合/固定集合:一旦创建就不可以进行修改的集合。一种数据类型。
如果把集合比作列表,冰冻集合就是元组。
#创建冰冻集合
空的冰冻集合:
变量 = frozenset()
创建具有数据的冰冻集合
变量 = frozenset(容器数据)
冰冻集合的作用:
为集合的操作提供一个不可以改变的对照集合。
冰冻集合除了不能修改之外,其余和集合一样!
copy() 可以使用
difference() 差集 可以使用
difference_update() 更新差集 不可以使用
intersection() 交集 可以使用
intersection_update()更新交集 不可以使用
union() 并集 可以使用
update()更新并集 不可以使用
issuperset() 检测超集 可以使用
issubset() 检测子集 可以使用
isdisjoint() 检测是否不相交 可以使用
symmetric_difference()可以使用(对称差集)
symmetric_difference_update()不可以使用(更新对称差集)
list1 = [“小王”,“小八”,“小霸王”,“小鸟”]
set1 = frozenset(list1)
set2 = frozenset((“小霸王”,“孙策”,“霸王”,“项羽”))
res = set1.intersection(set2)
print(res)