2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试

简介: 2024年最全python进阶系列- 04 集合,2024年最新哈希表 面试
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标签大全等等,这些都是可以送给粉丝们的东西。


相关文章
|
5月前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
175 0
|
6月前
|
存储 索引 Python
python 集合的所有基础知识
python 集合的所有基础知识
594 0
|
4月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
221 4
|
5月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
530 2
|
8月前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
200 4
|
8月前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
399 3
|
10月前
|
存储 缓存 安全
Python frozenset 集合详解:不可变集合的终极指南
frozenset是Python中一个常被忽视但极具价值的不可变集合类型。本文深入解析其本质、操作方法与应用场景,揭示其通过不可变性带来的安全性与性能优势。从底层实现到实战案例,涵盖字典键使用、缓存优化及类型注解等高级场景。同时对比性能数据,提供最佳实践指南,并展望Python 3.11+中的优化。掌握frozenset,可为代码带来更强健性与效率,适合多种特定需求场景。
399 5
|
10月前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
321 7
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?

推荐镜像

更多