当前位置: 首页 > news >正文

集合的奇妙世界:Python集合的经典、避坑与实战

集合的奇妙世界:Python集合的经典、避坑与实战


内容简介

本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进,逻辑清晰。

  1. 基础速通n 个浓缩提炼的核心知识点,夯实编程基础;
  2. 经典范例10 个贴近实际的应用场景,深入理解 Python3 的编程技巧和应用方法;
  3. 避坑宝典10 个典型错误解析,提供解决方案,帮助读者避免常见的编程陷阱;
  4. 水平考试10 道测试题目,检验学习成果,附有标准答案,以便自我评估;
  5. 实战案例3 个迷你项目开发,带领读者从需求分析到代码实现,掌握项目开发的完整流程。

无论你是 Python3 初学者,还是希望提升实战能力的开发者,本系列文章都能为你提供清晰的学习路径和实用的编程技巧,助你快速成长为 Python3 编程高手。


阅读建议

  • 初学者:建议从 “基础速通” 开始,系统学习 Python3 的基础知识,然后通过 “经典范例”“避坑宝典” 加深理解,最后通过 “水平考试”“实战案例” 巩固所学内容;
  • 有经验的开发者:可以直接跳转到 “经典范例”“避坑宝典”,快速掌握 Python3 的高级应用技巧和常见错误处理方法,然后通过 “实战案例” 提升项目开发能力;
  • 选择性学习:如果读者对某个特定主题感兴趣,可以直接选择相应版块学习。各版块内容既相互独立又逻辑关联,方便读者根据自身需求灵活选择;
  • 测试与巩固:完成每个版块的学习后,建议通过 “水平考试” 检验学习效果,并通过 “实战案例” 将理论知识转化为实际技能;
  • 项目实战优先:如果你更倾向于实战学习,可以直接从 “实战案例” 入手,边做边学,遇到问题再回溯相关知识点。

一、基础速通

在 Python 中,集合(set)是一种无序且不重复的可变容器,用于存储唯一元素。集合的主要特点包括:

  • 无序性:集合中的元素没有固定顺序。
  • 唯一性:集合中的元素不会重复。
  • 可变性:集合可以动态添加或删除元素。

集合常用于去重、成员检测及数学运算(如并集、交集等)。

1. 创建集合

可以使用花括号 {}set() 函数创建集合:

# 使用花括号
my_set = {1, 2, 3}
print(my_set)  # 输出: {1, 2, 3}# 使用 set() 函数
another_set = set([4, 5, 6])
print(another_set)  # 输出: {4, 5, 6}

注意:空集合必须用 set() 创建,{} 会创建空字典。

2. 集合操作

集合支持多种操作,如添加、删除、成员检测等:

# 添加元素
my_set.add(4)
print(my_set)  # 输出: {1, 2, 3, 4}# 删除元素
my_set.remove(2)
print(my_set)  # 输出: {1, 3, 4}# 成员检测
print(3 in my_set)  # 输出: True
3. 集合运算

集合支持并集、交集、差集等数学运算:

set1 = {1, 2, 3}
set2 = {3, 4, 5}# 并集
print(set1 | set2)  # 输出: {1, 2, 3, 4, 5}# 交集
print(set1 & set2)  # 输出: {3}# 差集
print(set1 - set2)  # 输出: {1, 2}# 对称差集
print(set1 ^ set2)  # 输出: {1, 2, 4, 5}
4. 集合方法

常用集合方法包括:

  • add(element):添加元素。
  • remove(element):移除元素,元素不存在时抛出异常。
  • discard(element):移除元素,元素不存在时不报错。
  • pop():随机移除并返回一个元素。
  • clear():清空集合。
  • union(other_set):返回并集。
  • intersection(other_set):返回交集。
  • difference(other_set):返回差集。
  • symmetric_difference(other_set):返回对称差集。
5. 示例
# 创建集合
fruits = {"apple", "banana", "cherry"}# 添加元素
fruits.add("orange")# 移除元素
fruits.discard("banana")# 集合运算
vegetables = {"carrot", "potato", "tomato"}
produce = fruits.union(vegetables)print(produce)  # 输出: {'apple', 'cherry', 'orange', 'carrot', 'potato', 'tomato'}
小结

集合是 Python 中用于存储唯一元素的无序容器,支持多种操作和数学运算,适合去重和成员检测等场景。


二、经典范例

Python 的集合(set)由于其无序性唯一性高效性,在许多场景中非常有用。以下是集合的经典应用场景及代码演示:

1. 去重

集合常用于从列表或其他可迭代对象中去除重复元素。

# 示例:列表去重
data = [1, 2, 2, 3, 4, 4, 5]
unique_data = set(data)  # 转换为集合去重
print(unique_data)  # 输出: {1, 2, 3, 4, 5}# 如果需要结果仍然是列表
unique_list = list(unique_data)
print(unique_list)  # 输出: [1, 2, 3, 4, 5]

2. 成员检测

集合的成员检测效率非常高(时间复杂度为 O(1)),适合用于快速判断元素是否存在。

# 示例:检查元素是否在集合中
fruits = {"apple", "banana", "cherry"}
print("banana" in fruits)  # 输出: True
print("orange" in fruits)  # 输出: False

3. 集合运算

集合支持并集、交集、差集等数学运算,适合处理需要比较或合并数据的场景。

# 示例:集合运算
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}# 并集
union_set = set1 | set2
print(union_set)  # 输出: {1, 2, 3, 4, 5, 6}# 交集
intersection_set = set1 & set2
print(intersection_set)  # 输出: {3, 4}# 差集
difference_set = set1 - set2
print(difference_set)  # 输出: {1, 2}# 对称差集(只存在于一个集合中的元素)
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set)  # 输出: {1, 2, 5, 6}

4. 过滤重复数据

集合可以快速过滤掉重复数据,例如从日志中提取唯一的 IP 地址。

# 示例:从日志中提取唯一 IP 地址
logs = ["192.168.1.1 - GET /index.html","192.168.1.2 - GET /about.html","192.168.1.1 - POST /login","192.168.1.3 - GET /index.html",
]# 提取 IP 地址
ips = set(log.split()[0] for log in logs)
print(ips)  # 输出: {'192.168.1.1', '192.168.1.2', '192.168.1.3'}

5. 查找共同元素

集合的交集运算可以快速找到两个数据集中的共同元素。

# 示例:查找两个列表中的共同元素
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]common_elements = set(list1) & set(list2)
print(common_elements)  # 输出: {4, 5}

6. 集合的差集运算

差集运算可以用于从一个集合中剔除另一个集合中的元素。

# 示例:从集合中剔除特定元素
allowed_fruits = {"apple", "banana", "cherry", "orange"}
forbidden_fruits = {"banana", "orange"}safe_fruits = allowed_fruits - forbidden_fruits
print(safe_fruits)  # 输出: {'apple', 'cherry'}

7. 统计唯一值

集合可以用于统计唯一值的数量。

# 示例:统计列表中唯一值的数量
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique_count = len(set(data))
print(unique_count)  # 输出: 4

8. 集合的对称差集

对称差集可以用于找出两个集合中不重复的元素。

# 示例:找出两个集合中不重复的元素
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}symmetric_diff = set1 ^ set2
print(symmetric_diff)  # 输出: {1, 2, 5, 6}

9. 集合的子集和超集检测

集合提供了方法用于检测一个集合是否是另一个集合的子集或超集。

# 示例:子集和超集检测
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}# 检测子集
print(set1.issubset(set2))  # 输出: True# 检测超集
print(set2.issuperset(set1))  # 输出: True

10. 集合的更新操作

集合支持批量添加元素或与其他集合合并。

# 示例:更新集合
fruits = {"apple", "banana"}
fruits.update(["cherry", "orange"])  # 添加多个元素
print(fruits)  # 输出: {'apple', 'banana', 'cherry', 'orange'}# 与其他集合合并
more_fruits = {"mango", "grape"}
fruits.update(more_fruits)
print(fruits)  # 输出: {'apple', 'banana', 'cherry', 'orange', 'mango', 'grape'}

小结

集合在 Python 中的应用场景非常广泛,包括去重、成员检测、集合运算、过滤数据等。由于其高效的特性,集合在处理大量数据时非常有用。通过合理使用集合,可以显著提升代码的性能和可读性。


三、避坑宝典

在使用 Python 集合时,可能会遇到一些典型错误。以下是常见的错误及其原因分析、纠正方法,并通过代码演示说明。

1. 尝试创建包含可变元素的集合

集合中的元素必须是不可变的(如整数、字符串、元组等),如果尝试将可变对象(如列表、字典)放入集合中,会引发 TypeError

错误代码
# 尝试将列表放入集合
my_set = {1, 2, [3, 4]}  # 列表是可变的

错误原因:集合要求元素必须是可哈希的(不可变的),而列表是可变对象。

纠正方法

将列表转换为元组(不可变)后再放入集合。

# 将列表转换为元组
my_set = {1, 2, tuple([3, 4])}
print(my_set)  # 输出: {1, 2, (3, 4)}

2. 混淆集合和字典的创建

空集合必须使用 set() 创建,使用 {} 会创建空字典。

错误代码
# 尝试创建空集合
my_set = {}
print(type(my_set))  # 输出: <class 'dict'>

错误原因{} 是创建空字典的语法,而不是空集合。

纠正方法

使用 set() 创建空集合。

# 正确创建空集合
my_set = set()
print(type(my_set))  # 输出: <class 'set'>

3. 尝试修改集合中的元素

集合中的元素必须是不可变的,因此不能直接修改集合中的元素。

错误代码
# 尝试修改集合中的元素
my_set = {1, 2, 3}
my_set[0] = 10  # 集合不支持索引和赋值

错误原因:集合是无序的,不支持索引操作,且元素不可变。

纠正方法

如果需要修改集合中的元素,可以先移除旧元素,再添加新元素。

# 移除旧元素并添加新元素
my_set = {1, 2, 3}
my_set.remove(1)
my_set.add(10)
print(my_set)  # 输出: {2, 3, 10}

4. 使用 remove() 删除不存在的元素

使用 remove() 删除集合中不存在的元素会引发 KeyError

错误代码
# 尝试删除不存在的元素
my_set = {1, 2, 3}
my_set.remove(4)  # 4 不在集合中

错误原因remove() 方法要求元素必须存在于集合中。

纠正方法

使用 discard() 方法,它不会在元素不存在时引发错误。

# 使用 discard() 安全删除元素
my_set = {1, 2, 3}
my_set.discard(4)  # 不会报错
print(my_set)  # 输出: {1, 2, 3}

5. 混淆集合和列表的操作

集合是无序的,不支持索引操作,而列表是有序的,支持索引操作。

错误代码
# 尝试对集合进行索引操作
my_set = {1, 2, 3}
print(my_set[0])  # 集合不支持索引

错误原因:集合是无序的,没有索引的概念。

纠正方法

如果需要索引操作,可以将集合转换为列表。

# 将集合转换为列表后进行索引操作
my_set = {1, 2, 3}
my_list = list(my_set)
print(my_list[0])  # 输出: 1(注意:集合无序,顺序可能不同)

6. 忽略集合的不可重复性

集合中的元素是唯一的,重复添加相同元素不会改变集合。

错误代码
# 重复添加相同元素
my_set = {1, 2, 3}
my_set.add(2)  # 2 已经存在
print(my_set)  # 输出: {1, 2, 3}

错误原因:集合会自动去重,重复添加相同元素不会生效。

纠正方法

无需纠正,这是集合的正常行为。如果需要允许重复元素,应使用列表。


7. 混淆 update()add()

add() 用于添加单个元素,而 update() 用于添加多个元素(如列表、集合等)。

错误代码
# 错误使用 add() 添加多个元素
my_set = {1, 2, 3}
my_set.add([4, 5])  # add() 不能接受列表

错误原因add() 只能接受单个元素,不能接受可迭代对象。

纠正方法

使用 update() 添加多个元素。

# 使用 update() 添加多个元素
my_set = {1, 2, 3}
my_set.update([4, 5])
print(my_set)  # 输出: {1, 2, 3, 4, 5}

8. 忽略集合运算的顺序

集合运算是无序的,但差集运算(-)的顺序会影响结果。

错误代码
# 忽略差集运算的顺序
set1 = {1, 2, 3}
set2 = {3, 4, 5}
result = set2 - set1  # 结果是 set2 中有但 set1 中没有的元素
print(result)  # 输出: {4, 5}

错误原因:差集运算的顺序会影响结果。

纠正方法

明确差集运算的顺序。

# 明确差集运算的顺序
set1 = {1, 2, 3}
set2 = {3, 4, 5}
result = set1 - set2  # 结果是 set1 中有但 set2 中没有的元素
print(result)  # 输出: {1, 2}

小结

在使用 Python 集合时,常见的错误包括:

  • 尝试将可变对象放入集合。
  • 混淆集合和字典的创建。
  • 尝试修改集合中的元素。
  • 使用 remove() 删除不存在的元素。
  • 混淆集合和列表的操作。
  • 忽略集合的不可重复性。
  • 混淆 update()add()
  • 忽略集合运算的顺序。

通过理解这些错误的原因并掌握正确的使用方法,可以更高效地使用集合。


四、水平考试

本试卷共计 30 道题。其中:选择题 15 题、填空题 10 题和编程题 5 题。满分为 100 分,每道题后附有正确答案。

一、选择题(每题2分,共30分)
  1. 集合中的元素是( )。

    • A. 有序的
    • B. 无序的
    • C. 可变的
    • D. 可重复的

    答案:B

  2. 以下哪个操作可以创建一个空集合?

    • A. {}
    • B. set()
    • C. []
    • D. ()

    答案:B

  3. 集合中的元素必须是( )。

    • A. 可变的
    • B. 不可变的
    • C. 可哈希的
    • D. 可排序的

    答案:B 和 C

  4. 以下哪个方法可以用于向集合中添加元素?

    • A. append()
    • B. add()
    • C. insert()
    • D. extend()

    答案:B

  5. 以下哪个方法可以安全地移除集合中的元素(即使元素不存在也不会报错)?

    • A. remove()
    • B. discard()
    • C. pop()
    • D. clear()

    答案:B

  6. 以下哪个操作可以计算两个集合的并集?

    • A. &
    • B. |
    • C. -
    • D. ^

    答案:B

  7. 以下哪个操作可以计算两个集合的交集?

    • A. &
    • B. |
    • C. -
    • D. ^

    答案:A

  8. 以下哪个操作可以计算两个集合的差集?

    • A. &
    • B. |
    • C. -
    • D. ^

    答案:C

  9. 以下哪个操作可以计算两个集合的对称差集?

    • A. &
    • B. |
    • C. -
    • D. ^

    答案:D

  10. 以下哪个方法可以清空集合中的所有元素?

    • A. remove()
    • B. discard()
    • C. pop()
    • D. clear()

    答案:D

  11. 以下哪个方法可以随机移除并返回集合中的一个元素?

    • A. remove()
    • B. discard()
    • C. pop()
    • D. clear()

    答案:C

  12. 以下哪个方法可以判断一个集合是否是另一个集合的子集?

    • A. issubset()
    • B. issuperset()
    • C. isdisjoint()
    • D. union()

    答案:A

  13. 以下哪个方法可以判断两个集合是否没有交集?

    • A. issubset()
    • B. issuperset()
    • C. isdisjoint()
    • D. union()

    答案:C

  14. 以下哪个操作可以将多个元素添加到集合中?

    • A. add()
    • B. update()
    • C. insert()
    • D. extend()

    答案:B

  15. 以下哪个代码会报错?

    • A. my_set = {1, 2, 3}
    • B. my_set = set([1, 2, 3])
    • C. my_set = {[1, 2, 3]}
    • D. my_set = set((1, 2, 3))

    答案:C


二、填空题(每题3分,共30分)
  1. 集合中的元素是________的。(填“唯一”或“可重复”)

    答案:唯一

  2. 使用________方法可以向集合中添加单个元素。

    答案:add()

  3. 使用________方法可以安全地移除集合中的元素(即使元素不存在也不会报错)。

    答案:discard()

  4. 集合的差集操作符是________。

    答案:-

  5. 集合的对称差集操作符是________。

    答案:^

  6. 使用________方法可以清空集合中的所有元素。

    答案:clear()

  7. 使用________方法可以判断一个集合是否是另一个集合的子集。

    答案:issubset()

  8. 使用________方法可以判断两个集合是否没有交集。

    答案:isdisjoint()

  9. 集合的并集操作符是________。

    答案:|

  10. 集合的交集操作符是________。

    答案:&


三、编程题(共40分)
1. 去重(5分)

编写一个函数 remove_duplicates(lst),接受一个列表作为参数,返回一个去重后的列表。

答案:

def remove_duplicates(lst):return list(set(lst))# 测试
print(remove_duplicates([1, 2, 2, 3, 4, 4, 5]))  # 输出: [1, 2, 3, 4, 5]

2. 集合运算(10分)

编写一个函数 set_operations(set1, set2),接受两个集合作为参数,返回它们的并集、交集和差集。

答案:

def set_operations(set1, set2):union = set1 | set2intersection = set1 & set2difference = set1 - set2return union, intersection, difference# 测试
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set_operations(set1, set2))  # 输出: ({1, 2, 3, 4, 5}, {3}, {1, 2})

3. 对称差集(10分)

编写一个函数 symmetric_difference(set1, set2),接受两个集合作为参数,返回它们的对称差集。

答案:

def symmetric_difference(set1, set2):return set1 ^ set2# 测试
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(symmetric_difference(set1, set2))  # 输出: {1, 2, 4, 5}

4. 子集检测(10分)

编写一个函数 is_subset(set1, set2),接受两个集合作为参数,判断 set1 是否是 set2 的子集。

答案:

def is_subset(set1, set2):return set1.issubset(set2)# 测试
set1 = {1, 2}
set2 = {1, 2, 3, 4}
print(is_subset(set1, set2))  # 输出: True

5. 集合操作综合(15分)

编写一个函数 set_manipulation(lst),接受一个列表作为参数,完成以下操作:

  1. 将列表转换为集合并去重。
  2. 添加元素 10 到集合中。
  3. 移除元素 2(如果存在)。
  4. 返回最终的集合。

答案:

def set_manipulation(lst):my_set = set(lst)my_set.add(10)my_set.discard(2)return my_set# 测试
print(set_manipulation([1, 2, 2, 3, 4, 4, 5]))  # 输出: {1, 3, 4, 5, 10}

总分:100分

通过这套试卷,可以全面测试对 Python 集合的理解和掌握程度。


五、实战案例

以下是 3 个应用“Python 集合”知识的综合应用项目,这些项目具有新颖性、前瞻性和实用性,每个项目都包含完整的代码、解释说明、测试案例和执行结果。

  1. 基因序列比对
  2. 文章推荐系统
  3. 运行日志分析

项目 1:基因序列比对(集合运算与去重)

项目描述

在生物信息学中,比对两个基因序列的相似性。使用集合的交集和并集计算相似度。

代码实现

# 基因序列(简化为字符串集合)
sequence1 = {"A", "T", "C", "A", "A", "A"}
sequence2 = {"A", "C", "G", "G", "T", "T"}# 计算相似度
def sequence_similarity(seq1, seq2):intersection = seq1 & seq2  # 交集union = seq1 | seq2  # 并集similarity = len(intersection) / len(union)return similarity# 测试
similarity = sequence_similarity(sequence1, sequence2)
print(f"基因序列相似度:{similarity:.2f}")

测试案例

  • 基因序列 1: {"A", "T", "C", "A", "A", "A"}
  • 基因序列 2: {"A", "C", "G", "G", "T", "T"}

执行结果

基因序列相似度:0.75

项目 2:文章推荐系统(去重与交集应用)

项目描述

设计一个简单的推荐系统,基于用户的历史行为和兴趣标签,推荐新的内容。使用集合的交集运算找到用户可能感兴趣的内容。

代码实现

# 用户兴趣标签和历史行为
user_interests = {"python", "AI", "machine learning", "data science"}
content_tags = {"article1": {"python", "data science"},"article2": {"AI", "deep learning"},"article3": {"machine learning", "statistics"},"article4": {"python", "web development"},
}# 推荐函数
def recommend_content(user_interests, content_tags):recommendations = {}for content, tags in content_tags.items():common_tags = user_interests & tags  # 计算交集if common_tags:recommendations[content] = common_tagsreturn recommendations# 测试
recommendations = recommend_content(user_interests, content_tags)
print("推荐内容及共同兴趣标签:")
for content, tags in recommendations.items():print(f"{content}: {tags}")

测试案例

  • 用户兴趣标签:{"python", "AI", "machine learning", "data science"}
  • 内容标签:
    • article1: {"python", "data science"}
    • article2: {"AI", "deep learning"}
    • article3: {"machine learning", "statistics"}
    • article4: {"python", "web development"}

执行结果

推荐内容及共同兴趣标签:
article1: {'python', 'data science'}
article2: {'AI'}
article3: {'machine learning'}
article4: {'python'}

项目 3:运行日志分析(去重与统计)

项目描述

分析服务器日志,统计独立 IP 地址的数量,并找出访问量最高的 IP 地址。

代码实现

# 模拟日志数据
logs = ["192.168.1.1 - GET /index.html","192.168.1.2 - GET /about.html","192.168.1.1 - POST /login","192.168.1.3 - GET /index.html","192.168.1.2 - GET /contact.html",
]# 统计独立 IP 地址
unique_ips = set(log.split()[0] for log in logs)
print(f"独立 IP 地址数量:{len(unique_ips)}")# 统计访问量最高的 IP 地址
from collections import Counter
ip_counter = Counter(log.split()[0] for log in logs)
most_common_ip = ip_counter.most_common(1)[0]
print(f"访问量最高的 IP 地址:{most_common_ip[0]},访问次数:{most_common_ip[1]}")

测试案例

  • 日志数据:
    192.168.1.1 - GET /index.html
    192.168.1.2 - GET /about.html
    192.168.1.1 - POST /login
    192.168.1.3 - GET /index.html
    192.168.1.2 - GET /contact.html
    

执行结果

独立 IP 地址数量:3
访问量最高的 IP 地址:192.168.1.1,访问次数:2

小结

这些项目展示了 Python 集合在实际问题中的广泛应用,包括基因分析对比、文章推荐系统、运行日志分析等方面。通过这些项目,可以深入理解集合的强大功能和灵活性。

相关文章:

集合的奇妙世界:Python集合的经典、避坑与实战

集合的奇妙世界&#xff1a;Python集合的经典、避坑与实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南&#xff0c;旨在帮助读者从基础入门到项目实战&#xff0c;全面提升编程能力。文章结构由 5 个版块组成&#xff0c;内容层层递进&#x…...

ubuntu20.04.6下运行VLC-Qt例子simple-player

下载examples-master.zip&#xff08;https://github.com/vlc-qt/examples&#xff09;&#xff0c;编译运行simple-player 参考链接&#xff1a; https://blog.csdn.net/szn1316159505/article/details/143743735 本文运行环境 Qt 5.15.2 Qt creator 5.0.2 主要步骤&#xf…...

Node.js MySQL:深度解析与最佳实践

Node.js MySQL:深度解析与最佳实践 引言 Node.js作为一种流行的JavaScript运行时环境,以其轻量级、高性能和事件驱动模型受到开发者的青睐。MySQL则是一款功能强大的关系型数据库管理系统,广泛应用于各种规模的应用程序中。本文将深入探讨Node.js与MySQL的集成,分析其优势…...

Linux网络 | 网络层IP报文解析、认识网段划分与IP地址

前言&#xff1a;本节内容为网络层。 主要讲解IP协议报文字段以及分离有效载荷。 另外&#xff0c; 本节也会带领友友认识一下IP地址的划分。 那么现在废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01; ps&#xff1a;本节正式进入网络层喽&#xff0c; 友友们…...

项目测试之Postman

文章目录 基础实战进行批量测试并输出报告 基础 实战 进行批量测试并输出报告 参考&#xff1a; https://blog.csdn.net/tyh_keephunger/article/details/109205191 概述 Newman是什么&#xff1f;Newman是Postman的命令行工具&#xff0c;用于执行接口测试集合。操作过程…...

C++——list的了解和使用

目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…...

MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式

MySQL基本架构图&#xff1a; MySQL主要分为Server层和存储引擎层 Server层&#xff1a; 连接器&#xff1a;连接客户端&#xff0c;获取权限&#xff0c;管理连接 查询缓存&#xff08;可选&#xff09;&#xff1a;在执行查询语句之前会先到查询缓存中查看是否执行过这条语…...

(leetcode 213 打家劫舍ii)

代码随想录&#xff1a; 将一个线性数组换成两个线性数组&#xff08;去掉头&#xff0c;去掉尾&#xff09; 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…...

如何用KushoAI提升API自动化测试效率:AI驱动的革命

在现代软件开发中,API测试已经成为确保系统稳定性和可靠性的关键。然而,传统的API测试往往依赖手动编写测试用例,每次修改API后都需要重新进行测试,这不仅耗时费力,还容易因人为疏忽而出现问题。想象一下,你是否曾因API在生产环境中出现微小错误而彻夜未眠?每次修改API后…...

docker安装nacos2.2.4详解(含:nacos容器启动参数、环境变量、常见问题整理)

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull nacos:2.2.4 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜像到…...

DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)的解决方法

在使用DBeaver连接MySQL数据库时&#xff0c;如果遇到“Access denied for user ip (using password: YES)”的错误提示&#xff0c;说明用户认证失败。此问题通常与数据库用户权限、配置错误或网络设置有关。本文将详细介绍解决此问题的步骤。 一、检查用户名和密码 首先&am…...

VirtualBox:跨磁盘导入已存的vdi磁盘文件顺便测试冷迁移

目录 1.背景 2.目的 3.步骤 3.1 安装在移动硬盘上 3.2.接管现有主机磁盘上的虚拟机 3.3接管迁移到移动硬盘的虚拟机 4. 结论 1.背景 电脑重新做了系统&#xff0c;然后找不到virtualbox的启动程序了&#xff0c;另外电脑磁盘由于存储了其他文件已经爆红&#xff0c;无法…...

蓝桥杯思维训练营(一)

文章目录 题目总览题目详解翻之一起做很甜的梦 蓝桥杯的前几题用到的算法较少&#xff0c;大部分考察的都是思维能力&#xff0c;方法比较巧妙&#xff0c;所以我们要积累对应的题目&#xff0c;多训练 题目总览 翻之 一起做很甜的梦 题目详解 翻之 思维分析&#xff1a;一开…...

EchoMimicV2的部署使用

最近有一个录课的需要&#xff0c;我不想浪费人力&#xff0c;只想用技术解决。需求很简单&#xff0c;就是用别人现成的录课视频中的形象和声线&#xff0c;再结合我提供的讲稿去生成一个新的录课视频。我觉得应该有现成的技术了&#xff0c;我想要免费大批量生产。最近看到这…...

JVM深入学习(一)

目录 一.JVM概述 1.1 为什么要学jvm&#xff1f; 1.2 jvm的作用 1.3 jvm内部构造 二.JVM类加载 2.1类加载过程 2.2类加载器 2.3类加载器的分类 2.4双亲委派机制 三.运行时数据区 堆空间区域划分&#xff08;堆&#xff09; 为什么分区(代)&#xff1f;&#xff08…...

线段树(Segment Tree)和树状数组

线段树&#xff08;Segment Tree&#xff09;和树状数组 线段树的实现链式&#xff1a;数组实现 解题思路树状数组 线段树是 二叉树结构 的衍生&#xff0c;用于高效解决区间查询和动态修改的问题&#xff0c;其中区间查询的时间复杂度为 O(logN)&#xff0c;动态修改单个元素的…...

Teleporters( Educational Codeforces Round 126 (Rated for Div. 2) )

Teleporters&#xff08; Educational Codeforces Round 126 (Rated for Div. 2) &#xff09; There are n 1 n1 n1 teleporters on a straight line, located in points 0 0 0, a 1 a_1 a1​, a 2 a_2 a2​, a 3 a_3 a3​, …, a n a_n an​. It’s possible to tele…...

JavaScript 注释

JavaScript 注释 引言 JavaScript 注释是编写代码过程中不可或缺的一部分。它们不仅可以提高代码的可读性和可维护性,还能帮助其他开发者(或未来的自己)更好地理解代码的意图。本文将深入探讨 JavaScript 注释的多种类型、使用方法和最佳实践。 一、注释的分类 JavaScri…...

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ 特点&#xff1a; AMQP协议&#xff1a;RabbitMQ是基于AMQP&#xff08;高级消息队列协议&#xff09;构建的&#xff0c;支持多种消息传递模式&#xff0c;如发布/订阅、路由、RPC等。多语言支持&#xff1a;支持多种编程语言的客户端库&#xff0c;包括Java、P…...

AVL搜索树

一、介绍 高度平衡的搜索二叉树&#xff0c;保证每个节点的左右子树高度差不超过1&#xff0c;降低搜索树的高度以提高搜索效率。 通过平衡因子和旋转来保证左右子树高度差不超过1 二、插入节点 1、插入规则 &#xff08;1&#xff09;搜按索树规则插入节点 &#xff08;…...

ELK模块封装starter

文章目录 1.combinations-elk-starter1.目录结构2.log4j2-spring.xml 从环境变量读取host和port3.ELKProperties.java 两个属性4.ELKAutoConfiguration.java 启用配置类5.ELKEnvironmentPreparedListener.java 监听器从application.yml中获取属性值6.spring.factories 注册监听…...

C# 与.NET 日志变革:JSON 让程序“开口说清话”

一、引言&#xff1a;日志新时代的开启 在软件开发的漫长旅程中&#xff0c;日志一直是我们不可或缺的伙伴。它就像是应用程序的 “黑匣子”&#xff0c;默默地记录着程序运行过程中的点点滴滴&#xff0c;为我们在调试、排查问题以及性能优化时提供关键线索。在早期&#xff…...

Ubuntu 系统,如何使用双Titan V跑AI

要在Ubuntu系统中使用双NVIDIA Titan V GPU来运行人工智能任务&#xff0c;你需要确保几个关键组件正确安装和配置。以下是基本步骤&#xff1a; 安装Ubuntu操作系统&#xff1a; 下载最新版本的Ubuntu服务器或桌面版ISO文件。使用工具如Rufus&#xff08;Windows&#xff09;或…...

CSDN的历史

CSDN(中国开发者网络,China Software Developer Network)是中国最具影响力的IT技术社区之一,其历史可追溯至1999年。以下是其发展历程和关键节点: --- **一、创立背景(1999年)** - **创始人**:蒋涛(国内知名技术人,曾参与金山软件早期开发)。 - **初衷**:为国内程…...

使用Pygame制作“贪吃蛇”游戏

贪吃蛇 是一款经典的休闲小游戏&#xff1a;玩家通过操控一条会不断变长的“蛇”在屏幕中移动&#xff0c;去吃随机出现的食物&#xff0c;同时要避免撞到墙壁或自己身体的其他部分。由于其逻辑相对简单&#xff0c;但可玩性和扩展性都不错&#xff0c;非常适合作为新手练习游戏…...

【详细教程】如何在Mac部署Deepseek R1?

DeepSeek是目前最火的国产大模型&#xff0c;官方App用户太多服务经常出现卡顿&#xff0c;部署一个本地DeepSeek R1可以方便使用。 1.系统最低要求 macOS 11 Big Sur 或更新 2.下载ollama https://ollama.com/ 3.安装DeepSeek R1 打开终端 运行命令 ollama run deepseek-…...

Java中的getInterfaces()方法:使用与原理详解

在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一个强大的工具&#xff0c;它允许程序在运行时动态地获取类的信息并操作类的属性和方法。getInterfaces()方法是Java反射API中的一个重要方法&#xff0c;用于获取类或接口直接实现的接口。本文将深入探讨getInt…...

PT站点自动签到

在站点下载一些视频电影资源&#xff0c;站点需要长期维护&#xff0c;每天自动签到。 两种方式&#xff1a; 一、保持浏览器登录状态&#xff0c;打开默认用户文件&#xff0c; 模拟点击签到&#xff08;点击按钮自行设置&#xff1a;根据href名称&#xff09; log日志 首次…...

计算机网络一点事(23)

传输层 端口作用&#xff1a;标识主机特定进程&#xff0c;TCP&#xff0c;UDP协议 端口号分类&#xff1a;服务器&#xff1a;0-1023&#xff0c;熟知 1024-49151 登记 客户端&#xff1a;49152-65535 功能&#xff1a;实现端到端&#xff0c;进程到进程的通信&#xff0c…...

vim操作简要记录

操作容易忘记&#xff0c;记录一下基本使用的 :wq保存退出 :w :q :q! :wq! i I a A 方向键 h左 j下 k上 l右 dd删除方行&#xff08;这其实是剪切行操作&#xff0c;不过一般用作删除&#xff0c;长按可删除&#xff0c;不过按.执行上一次操作删除更快&#xff09; .执行上…...

DeepSeek大模型技术深度解析:揭开Transformer架构的神秘面纱

摘要 DeepSeek大模型由北京深度求索人工智能基础技术研究有限公司开发&#xff0c;基于Transformer架构&#xff0c;具备卓越的自然语言理解和生成能力。该模型能够高效处理智能对话、文本生成和语义理解等复杂任务&#xff0c;标志着人工智能在自然语言处理领域的重大进展。 关…...

Carla-ModuleNotFoundError: No module named ‘agents.navigation‘

解决办法&#xff1a; You need to make sure that _agents _ is in your (PYTHON)PATH variable or your working dictionary. Setting your working dictionary to <CARLA_ROOT>/PythonAPI/carla would fix it as agents is a sub dictionary. Similarly adding the c…...

1.Template Method 模式

模式定义 定义一个操作中的算法的骨架&#xff08;稳定&#xff09;&#xff0c;而将一些步骤延迟&#xff08;变化)到子类中。Template Method 使得子类可以不改变&#xff08;复用&#xff09;一个算法的结构即可重定义&#xff08;override 重写&#xff09;该算法的某些特…...

腾讯云开发提供免费GPU服务

https://ide.cloud.tencent.com/dashboard/web 适用于推理场景&#xff0c;每个月10000分钟免费时长 166 小时 40 分钟 自带学术加速&#xff0c;速度还是不错的 白嫖 Tesla T4 16G 算力 显存&#xff1a;16GB 算力&#xff1a;8 TFlops SP CPU&#xff1a;8 核 内存&#…...

11.QT控件:输入类控件

1. Line Edit(单行输入框) QLineEdit表示单行输入框&#xff0c;用来输入一段文本&#xff0c;但是不能换行。 核心属性&#xff1a; 核心信号&#xff1a; 2. Text Edit(多行输入框) QTextEdit表示多行输入框&#xff0c;也是一个富文本 & markdown编辑器。并且能在内容超…...

想学习Python编程,应该如何去学习呢

学习Python编程是一个循序渐进的过程&#xff0c;以下是一个详细的学习路径和建议&#xff1a; 一、基础入门 安装Python环境&#xff1a; 从Python官方网站下载并安装适合你操作系统的Python版本。确保将Python添加到系统路径中&#xff0c;以便在命令行中方便地访问。 学习…...

Java知识速记:深拷贝与浅拷贝

Java知识速记&#xff1a;深拷贝与浅拷贝 什么是浅拷贝&#xff1f; 浅拷贝指的是创建一个新对象&#xff0c;但新对象的属性值是对原对象属性值的引用。当原对象的属性是基本类型时&#xff0c;浅拷贝能够直接复制其值&#xff1b;当属性是对象时&#xff0c;仅复制引用&…...

I2C基础知识

引言 这里祝大家新年快乐&#xff01;前面我们介绍了串口通讯协议&#xff0c;现在我们继续来介绍另一种常见的简单的串行通讯方式——I2C通讯协议。 一、什么是I2C I2C 通讯协议&#xff08;Inter-Integrated Circuit&#xff09;是由Phiilps公司在上个世纪80年代开发的&#…...

智慧园区平台系统在数字化转型中的作用与应用前景探究

内容概要 在当前快速变化的商业环境中&#xff0c;数字化转型已经成为企业发展的重要趋势&#xff0c;而智慧园区平台系统则是这一转型的核心工具之一。这种系统集成了多种现代技术&#xff0c;能够有效提升园区的管理效率、优化资产使用&#xff0c;并提升整体服务水平。智慧…...

19 压测和常用的接口优化方案

高并发的平台应用&#xff0c;项目上线前离不开一个重要步骤就是压测&#xff0c;压测对于编码中的资源是否问题的排查&#xff0c;性能的调优都是离不开的。测试还要做测试报告&#xff0c;出具了测试报告给到运维团队才能上线。 压测的测试报告主要有以下几个方面:1.响应时间…...

buuuctf_秘密文件

题目&#xff1a; 应该是分析流量包了&#xff0c;用wireshark打开 我追踪http流未果&#xff0c;分析下ftp流 追踪流看看 用户 “ctf” 使用密码 “ctf” 登录。 PORT命令用于为后续操作设置数据连接。 LIST命令用于列出 FTP 服务器上目录的内容&#xff0c;但在此日志中未…...

前端学习-事件委托(三十)

目录 前言 课前思考 for循环注册事件 语法 事件委托 1.事件委托的好处是什么? 2.事件委托是委托给了谁&#xff0c;父元素还是子元素 3.如何找到真正触发的元素 示例代码 总结 前言 才子佳人&#xff0c;自是白衣卿相 课前思考 1.如果同时给多个元素注册事件&…...

工具的应用——安装copilot

一、介绍Copilot copilot是一个AI辅助编程的助手&#xff0c;作为需要拥抱AI的程序员可以从此尝试进入&#xff0c;至于好与不好&#xff0c;应当是小马过河&#xff0c;各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题&#xff0c;然后把它总结下&…...

OPENGLPG第九版学习

文章目录 一、OpenGL概述二、着色器基础三、OpenGL绘制方式四、颜色、像素和片元五、视口变换、裁减、剪切与反馈六、纹理与帧缓存七、光照与阴影八、程序式纹理 skip九、细分着色器 skip十、几何着色器 skip十一、内存十二、计算着色器 skip附录 A 第三方支持库附录 B OpenGL …...

C++中常用的十大排序方法之1——冒泡排序

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C中常用的排序方法之——冒泡排序的相关…...

算法总结-哈希表

文章目录 1.赎金信1.答案2.思路 2.字母异位词分组1.答案2.思路 3.两数之和1.答案2.思路 4.快乐数1.答案2.思路 5.最长连续序列1.答案2.思路 1.赎金信 1.答案 package com.sunxiansheng.arithmetic.day14;/*** Description: 383. 赎金信** Author sun* Create 2025/1/22 11:10…...

文件上传功能(一)

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 目录 总说 一、功能实现 1.1 Controller层 二、优化 一、功能实现 1.1 Controller层 在contoller层&#xff0c;创建一个File…...

【LeetCode 刷题】二叉树-二叉树的属性

此博客为《代码随想录》二叉树章节的学习笔记&#xff0c;主要内容为二叉树的属性相关的题目解析。 文章目录 101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径404.左叶子之和513.找树左下角的值112. 路…...

Redisson

Redisson快速入门 将原先逻辑修改 Redis代金卷(优惠卷)秒杀案例-多应用版-CSDN博客...

回顾生化之父三上真司的游戏思想

1. 放养式野蛮成长路线&#xff0c;开创生存恐怖类型 三上进入capcom后&#xff0c;没有培训&#xff0c;没有师傅手把手的指导&#xff0c;而是每天摸索写策划书&#xff0c;老员工给出不行的评语后&#xff0c;扔掉旧的重写新的。 然后突然就成为游戏总监&#xff0c;进入开…...