2024年最全python进阶系列- 04 集合(1),面试高频问题回答

简介: 2024年最全python进阶系列- 04 集合(1),面试高频问题回答

创建集合set

用大括号{}或者内置函数set()创建集合。

代码

my_set = {"apple", "banana", "cherry"}
print(my_set)
# 创建一个集合,可以使用大括号或者内置函数
my_set_2 = set(["one", "two", "three"])  # 将列表转为集合,自动去重
my_set_2 = set(("one", "two", "three"))  # 将元组转为集合,自动去重
print(my_set_2)
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'}
<class 'dict'>
<class 'set'>

增加元素

调用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_aset_b的并集,且不改变set_aset_b
  • set_a.intersection(set_b) 返回集合set_aset_b的交集 ,且不改变set_aset_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_aset_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)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试宝典

简历模板


相关文章
|
2月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
87 1
思科设备巡检命令Python脚本大集合
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
113 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
2月前
|
存储 缓存 API
解密 Python 集合的实现原理
解密 Python 集合的实现原理
50 11
|
2月前
|
存储 自然语言处理 数据处理
使用Python计算多个集合的交集详解
使用Python计算多个集合的交集详解
61 1
|
3月前
|
存储 API 索引
Python 的集合是怎么实现的?
Python 的集合是怎么实现的?
53 9
|
3月前
|
存储 索引 Python
Python常用数据结构——集合
Python常用数据结构——集合
62 3
|
2月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
2月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
29天前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!