目录:
集合 set
集合Set的特性
- 集合是可变的容器
- 集合内的数据对象都是唯一的(不能重复多次的)
- 集合是无序的存储结构,集合中的数据没有先后顺序关系
- 集合内的元素必须是不可变对象
- 集合是可迭代对象
- 集合是相当于只有键没有值的字典(键则是集合的数据)
创建集合
- 创建空的集合:
set() - 创建非空的集合:
s = {1, 2, 3, 4} - 集合的构造函数 set
set() 创建一个空的集合对象(不能用{}来创建空集合)
set(iterable) 用可迭代对象创建一个新的集合对象 - 示例:
s = set() # s 为空集合
s = {3,5,7,9}
s = set(“ABC”) # s = {‘A’, ‘B’, ‘C’}
s = set({1:’1’, 2:”2”, 5:’5’}) # s = {1,2,5}
s = set(range(1:10:3)) # s = {1,4,7}
集合的运算:
- 交集, 并集,补集,子集,超集
- 运算符:
& | - ^ < <= > >= == !=
in / not in - & 生成两个集合的交集
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} - > 判断一个集合是另一个集合的超集
- < 判断一个集合是别一个集合的子集
{1, 2, 3} > {1, 2} # True
{2, 3, 1} > {3, 2} # True
{2, 3, 4} < {1, 2, 3, 4} # True - == / != 集合相同和不同
{1, 2, 3} == {3, 2, 1} # True
{1, 2, 3} != {2, 3, 4} # True in / not in 运算符
in 等同于字典的in, 用于集合中,当某个值存在于集合中,返回True,否则返回False
not in 与 in 返回值相反
集合的 in / not in 运算符的速度快于序列能用于集合的函数:
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)集合是可迭代对象
集合练习:
经理有: 曹操,刘备,周瑜
技术员有: 曹操,周瑜,张飞,赵云
用集合求:- 即是经理也是技术员的有谁?
- 是经理,但不是技术员的有谁?
- 是技术人员,但不是经理的都有谁?
- 张飞是经理吗?
- 身兼一职的人都有谁?
- 经理和技术员共有几个人?
python3 集合中的常用方法:
见:
>>> help(set)
或:
python_base_docs_html/set_????.html
集合推导式
- 集合推导式是用可迭代对象生成集合的表达式
语法:
{ 表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: [] 内的内容可省略示例:
numbers = (1,2,3,2,2,3,3,4,5)
s = {x for x in numbers} # 去除重复的元素
固定集合 frozenset
固定集合特性
- 固定集合是不可变的,无序的,含有不重复元素的集合
- 作用:
固定集合可以作为字典的键,还可以作为集合的值
固定集合创建
- 创建空的固定集合
fs = frozenset() - 创建非空的固定集合:
frozenset(iterable) 用可迭代对象创建新的固定集合
示例:
fz = frozenset([2,3,5,7]) # frozenset({2, 3, 5, 7}) - 运算:
& 交集
| 并集
- 补集
^ 对称补集
in /not in 运算
< <= > >= == !=
(以上运算 与 set 的运算完全相同)
- 补集
- 固定集合的方法:
相当于集合的全部方法(去掉修改集合的方法)
列表 ,字典,集合对象优缺点:
- 都为可变
- 列表的尾部插入速度比较快,查中间插入和头插数据速度慢
- 列表有序
- 字典添加,删除,修改速度快于列表
- 集合的添加,删除快于列表,且不能存储重复元素
练习:
输入一段字符串,打印所有输入过的字符串,但重复的只打印一次,(不要求打印的顺序与输入顺序一致)
输入: abcdabcaba
打印:
a b c d输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数:
如:
输入:abcdabcaba
打印如下:
a: 4次
b: 3次
d: 1次
c: 2次
注: 不要求打印顺序
练习:
- 有一只小猴子,摘了很多桃.
第一天吃了全部桃子的一半,感觉不饱又吃了一个
第二天吃了剩下桃子的一半,感觉不饱又吃了一个
…. 以此类推
到第十天,发现只剩下一个了
请问第一天摘了多少个桃? - 完全数
1 + 2 + 3 = 6 (6为完全数)
1, 2, 3都为6的因数(能被一个数x整除的数为y,则y为x的因数)
1 x 6 = 6
2 x 3 = 6
完全数是指除自身以外的所有的因数之和相加等于自身的数
求 4 ~ 5个完全数,并打印出来
答案:
6
28
496
8128 - 任意输入一个数n代表三角形的高度, 打印此形将的三角形
如:
请输入:4
打印如下:
1
121
12321
1234321 - 将第三题打印三角形变为打印棱形
1
121
12321
1234321
12321
121
1