my_set_3 = set(“aaabbbcccdddeeeeeffff”) # 将字符串转为集合,自动去重 print(my_set_3)
小心:一个空集合不能使用{},因为这会被解释为字典,用set()代替
a = {} print(type(a)) # 此时为字典 a = set() print(type(a))
**结果**:
{‘banana’, ‘apple’, ‘cherry’} {‘three’, ‘one’, ‘two’} {‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘a’}
### 增加元素 调用`set.add()`函数向集合中添加元素。 **代码**:
my_set = set()
用add()方法增加元素
my_set.add(42) my_set.add(True) my_set.add(“Hello”)
注意:添加的元素没有顺序,添加的元素可能会在打印时不同
print(my_set)
什么也不会发生,因为元素已经存在
my_set.add(42) print(my_set)
**结果**:
{True, 42, ‘Hello’} {True, 42, ‘Hello’}
### 移除元素 从集合中删除元素,如如下4种方法: * `set.remove()`删除集合中的某个元素,元素不存在时抛出异常`KeyError`。 * `set.discard()`删除集合中的某个元素,元素不存在时不抛出异常。 * `set.clear()` 清空集合 * `set.pop()` 随机返回一个元素,并删除 **代码**:
remove(x):移除x,如果元素不存在,则抛出KeyError异常
my_set = {“apple”, “banana”, “cherry”} my_set.remove(“apple”) print(my_set)
KeyError:
my_set.remove(“orange”)
discard(x): 如果元素不存在,不会抛出异常
my_set.discard(“cherry”) my_set.discard(“blueberry”) print(my_set)
clear():移除所有元素
my_set.clear() print(my_set)
pop(): 移除并返回一个随机元素
a = {True, 2, False, “hi”, “hello”} print(a.pop()) print(a)
**结果**:
{‘banana’, ‘cherry’} {‘banana’} set() False {True, 2, ‘hi’, ‘hello’}
### 检查元素是否在 `in` 操作符,适合列表、字典、元组 及集合,万能的检查元素是否存在! **代码**:
my_set = {“apple”, “banana”, “cherry”} if “apple” in my_set: print(“yes”)
**结果**:
yes
### 遍历集合 `for`循环遍历,适合列表、字典、元组 及集合,万能遍历容器类数据结构! **代码**:
迭代集合
注意:顺序不重要
my_set = {“apple”, “banana”, “cherry”} for i in my_set: print(i)
**结果**:
banana
apple
cherry
### 合并 和 交集 * `set_a.union(set_b)` 返回集合`set_a`与`set_b`的并集,且不改变`set_a`、`set_b` * `set_a.intersection(set_b)` 返回集合`set_a`与`set_b`的交集 ,且不改变`set_a`、`set_b` **代码**:
odds = {1, 3, 5, 7, 9} evens = {0, 2, 4, 6, 8} primes = {2, 3, 5, 7}
union(): 合并两个集合,不会有重复
注意:这不会改变两个集合
u = odds.union(evens) print(u)
intersection(): 求交集
i = odds.intersection(evens) print(i) i = odds.intersection(primes) print(i) i = evens.intersection(primes) print(i)
**结果**:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} set() {3, 5, 7} {2}
### 差集 * `set_a.difference(set_b)` 返回集合`set_a`中不在`set_b`中的元素,即差集,且不改变`set_a`、`set_b` * `set_a.symmetric_difference(set_b)` 返回`set_`和`set_b`中不同的元素 > > **注意**: `set_a.symmetric_difference(set_b)` = `set_b.symmetric_difference(set_a)` 想想为什么? > > > **代码**:
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9} setB = {1, 2, 3, 10, 11, 12}
差集:返回setA中不在setB中的元素
diff_set = setA.difference(setB) print(diff_set)
反过来,返回setB中不在setA中的元素
diff_set = setB.difference(setA) print(diff_set)
symmetric_difference():返回setA和setB中不同的元素
diff_set = setA.symmetric_difference(setB) print(diff_set)
A.symmetric_difference(B) = B.symmetric_difference(A)
diff_set = setB.symmetric_difference(setA) print(diff_set)
**结果**:
{4, 5, 6, 7, 8, 9} {10, 11, 12} {4, 5, 6, 7, 8, 9, 10, 11, 12} {4, 5, 6, 7, 8, 9, 10, 11, 12}
### 更新集合 主要有`update()`、`intersection_update`、`difference_update`、`symmetric_difference_update` 四种方法,具体见如下代码:
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9} setB = {1, 2, 3, 10, 11, 12}
update(): 将setB中的元素添加到setA中
setA.update(setB) print(setA)
intersection_update(): 将setA和setB中的元素交集添加到setA中
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9} setA.intersection_update(setB) print(setA)
difference_update() : 将setA和setB中的元素差集添加到setA中
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9} setA.difference_update(setB) print(setA)
symmetric_difference_update(): 将setA和setB中的元素对称差集添加到setA中
setA = {1, 2, 3, 4, 5, 6, 7, 8, 9} setA.symmetric_difference_update(setB) print(setA)
注意:所有的update方法也可以用其他可迭代对象作为参数,如列表,元组
setA.update([1, 2, 3, 4, 5, 6])
**结果**:
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。