集合的奇妙世界: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 集合在实际问题中的广泛应用,包括基因分析对比、文章推荐系统、运行日志分析等方面。通过这些项目,可以深入理解集合的强大功能和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年1月个人工作生活总结

本文为 2025年1月工作生活总结。 研发编码 使用sqlite3命令行查询表数据 可以直接使用sqlite3查询数据表&#xff0c;不需进入命令行模式。示例如下&#xff1a; sqlite3 database_name.db "SELECT * FROM table_name;"linux shell使用read超时一例 先前有个编译…

ARM嵌入式学习--第十一天(中断处理 , ADC)

--中断的概念 中断是指计算机运行过程中&#xff0c;出现某些意外情况需主机干预时&#xff0c;机器能自动停止正在运行的程序并转入处理新情况的程序&#xff0c;处理完毕后又返回被暂停的程序继续运行 --CPU处理事情的方式 -轮询方式 不断查询是否有事情需要处理&#xff0c…

android Camera 的进化

引言 Android 的camera 发展经历了3个阶段 &#xff1a; camera1 -》camera2 -》cameraX。 正文 Camera1 Camera1 的开发中&#xff0c;打开相机&#xff0c;设置参数的过程是同步的&#xff0c;就跟用户实际使用camera的操作步骤一样。但是如果有耗时情况发生时&#xff0c;会…

JavaScript原型链与继承:优化与扩展的深度探索

在 JavaScript 的世界里&#xff0c;万物皆对象&#xff0c;而每个对象都有一个与之关联的原型对象&#xff0c;这就构成了原型链的基础。原型链&#xff0c;简单来说&#xff0c;是一个由对象的原型相互连接形成的链式结构 。每个对象都有一个内部属性[[Prototype]]&#xff0…

vue2项目(一)

项目介绍 电商前台项目 技术架构&#xff1a;vuewebpackvuexvue-routeraxiosless.. 封装通用组件登录注册token购物车支付项目性能优化 一、项目初始化 使用vue create projrct_vue2在命令行窗口创建项目 1.1、脚手架目录介绍 ├── node_modules:放置项目的依赖 ├──…

分层多维度应急管理系统的设计

一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…

350.两个数组的交集 ②

目录 题目过程解法 题目 给你两个整数数组 nums1 和 nums2 &#xff0c;请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数&#xff0c;应与元素在两个数组中都出现的次数一致&#xff08;如果出现次数不一致&#xff0c;则考虑取较小值&#xff09;。可以不考虑…

sublime_text的快捷键

sublime_text的快捷键 向下复制, 复制光标所在整行并插入到下一行&#xff1a;通过 CtrlShiftD 实现快速复制当前行的功能。 可选多行, 不选则复制当前行 ctrl Shift D 删除当前行&#xff1a;通过 CtrlShiftK 实现快速删除当前行的功能。 可选多行, 不选则删当前行 ctrl S…

[ACTF2020 新生赛]BackupFile1

题目 翻译&#xff0c;尝试找出源文件&#xff01; 扫目录使用参数-e * python dirsearch.py -u http://0c3b21c0-d360-4baa-8b97-aa244f4c4825.node5.buuoj.cn:81/ -e * 最终扫描到一个文件名为&#xff1a;/index.php.bak的文件&#xff0c;把备份文件下载下来 源码 <?…

OPENPPP2 —— VMUX_NET 多路复用原理剖析

在阅读本文之前&#xff0c;必先了解以下几个概念&#xff1a; 1、MUX&#xff08;Multiplexer&#xff09;&#xff1a;合并多个信号到单一通道。 2、DEMUX&#xff08;Demultiplexer&#xff09;&#xff1a;从单一通道分离出多个信号。 3、单一通道&#xff0c;可汇聚多个…

DeepSeek-R1大模型本地部署及简单测试

目录 DeepSeek-R1大模型本地部署及简单测试背景我的测试环境模型参数选择适用场景参数规模 本地部署安装 DeepSeek-R1大模型本地部署及简单测试 背景 最近deepseek非常火, 要说2025年震惊科技圈的事件要数DeepSeek这个国产AI的横空出世&#xff0c;这是一款免费、开源且隐私优…

C# 数组和列表的基本知识及 LINQ 查询

数组和列表的基本知识及 LINQ 查询 一、基本知识二、引用命名空间声明三、数组3.1、一维数组3.2、二维数组3.3、不规则数组 Jagged Array 四、列表 List4.1、一维列表4.2、二维列表 五、数组和列表使用 LINQ的操作和运算5.1、一维 LIST 删除所有含 double.NaN 的行5.2、一维 LI…

C++计算给定序列在多次修改前后满足特定条件的极大匹配方案的大小

给定长度为n的整数序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1​,a2​,...,an​和长度为n的01序列 b 1 , b 2 , . . . , b n b_1,b_2,...,b_n b1​,b2​,...,bn​。 对于 1 ≤ i < j ≤ n 1\leq i<j\leq n 1≤i<j≤n&#xff0c;称二元组 ( i , j ) (i,j) (i,j)…

强化学习笔记(3)——基于值函数的方法和策略梯度方法

分为两大类方法&#xff1a; 基于值函数的方法&#xff08;Temporal Difference Methods, TD Methods&#xff09; 策略梯度方法&#xff08;Policy Gradient Methods&#xff09;。 二者不同之处&#xff1a; 通过值函数来间接表达隐式的策略&#xff0c;一个是直接迭代优化策…

柱量最大值转向

• 在MACD指标中&#xff0c;柱状线在0轴之上时用红色柱线表示&#xff0c;简称为“红柱”。 • 在上涨过程中&#xff0c;柱状线会在0轴之上不断向上发散&#xff0c;这是由于快线DIF带动慢线DEA向上运行&#xff0c;并且DIF不断远离DEA。 2. 上涨动能的变化&#xff1a;…

Excel 技巧23 - 在Excel中用切片器做出查询效果(★★★)

本文讲如何在Excel中用切片器做出查询效果。 目录 1&#xff0c;在Excel中用切片器做出查询效果 1-1&#xff0c;Excel 中的切片器是什么&#xff1f; 1-2&#xff0c;用切片器做出查询效果 1&#xff09;&#xff0c;点击任一表格内单元格&#xff0c;按下CtrlA&#xff0…

Java 性能优化与新特性

Java学习资料 Java学习资料 Java学习资料 一、引言 Java 作为一门广泛应用于企业级开发、移动应用、大数据等多个领域的编程语言&#xff0c;其性能和特性一直是开发者关注的重点。随着软件系统的规模和复杂度不断增加&#xff0c;对 Java 程序性能的要求也越来越高。同时&a…

01.04、回文排序

01.04、[简单] 回文排序 1、题目描述 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。 2、解题思路 回文串的特点&#xff1a; 一个回文串在…

leetcode——排序链表(java)

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&#xff1a; …

python开发,最好的环境是什么

目录 1. 集成开发环境&#xff08;IDE&#xff09; 1.1 PyCharm 1.2 Visual Studio Code (VSCode) 2. 文本编辑器 2.1 Sublime Text 2.2 Vim/NeoVim 3. 虚拟环境管理 4. 版本控制与协作 5. 容器化开发 6. 项目管理与依赖管理工具 7. 单元测试与调试 最佳组合推荐 …