集合的奇妙世界:Python集合的经典、避坑与实战
集合的奇妙世界:Python集合的经典、避坑与实战
内容简介
本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进,逻辑清晰。
- 基础速通:n 个浓缩提炼的核心知识点,夯实编程基础;
- 经典范例:10 个贴近实际的应用场景,深入理解 Python3 的编程技巧和应用方法;
- 避坑宝典:10 个典型错误解析,提供解决方案,帮助读者避免常见的编程陷阱;
- 水平考试:10 道测试题目,检验学习成果,附有标准答案,以便自我评估;
- 实战案例: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分)
-
集合中的元素是( )。
- A. 有序的
- B. 无序的
- C. 可变的
- D. 可重复的
答案:B
-
以下哪个操作可以创建一个空集合?
- A.
{} - B.
set() - C.
[] - D.
()
答案:B
- A.
-
集合中的元素必须是( )。
- A. 可变的
- B. 不可变的
- C. 可哈希的
- D. 可排序的
答案:B 和 C
-
以下哪个方法可以用于向集合中添加元素?
- A.
append() - B.
add() - C.
insert() - D.
extend()
答案:B
- A.
-
以下哪个方法可以安全地移除集合中的元素(即使元素不存在也不会报错)?
- A.
remove() - B.
discard() - C.
pop() - D.
clear()
答案:B
- A.
-
以下哪个操作可以计算两个集合的并集?
- A.
& - B.
| - C.
- - D.
^
答案:B
- A.
-
以下哪个操作可以计算两个集合的交集?
- A.
& - B.
| - C.
- - D.
^
答案:A
- A.
-
以下哪个操作可以计算两个集合的差集?
- A.
& - B.
| - C.
- - D.
^
答案:C
- A.
-
以下哪个操作可以计算两个集合的对称差集?
- A.
& - B.
| - C.
- - D.
^
答案:D
- A.
-
以下哪个方法可以清空集合中的所有元素?
- A.
remove() - B.
discard() - C.
pop() - D.
clear()
答案:D
- A.
-
以下哪个方法可以随机移除并返回集合中的一个元素?
- A.
remove() - B.
discard() - C.
pop() - D.
clear()
答案:C
- A.
-
以下哪个方法可以判断一个集合是否是另一个集合的子集?
- A.
issubset() - B.
issuperset() - C.
isdisjoint() - D.
union()
答案:A
- A.
-
以下哪个方法可以判断两个集合是否没有交集?
- A.
issubset() - B.
issuperset() - C.
isdisjoint() - D.
union()
答案:C
- A.
-
以下哪个操作可以将多个元素添加到集合中?
- A.
add() - B.
update() - C.
insert() - D.
extend()
答案:B
- A.
-
以下哪个代码会报错?
- 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
- A.
二、填空题(每题3分,共30分)
-
集合中的元素是________的。(填“唯一”或“可重复”)
答案:唯一
-
使用________方法可以向集合中添加单个元素。
答案:
add() -
使用________方法可以安全地移除集合中的元素(即使元素不存在也不会报错)。
答案:
discard() -
集合的差集操作符是________。
答案:
- -
集合的对称差集操作符是________。
答案:
^ -
使用________方法可以清空集合中的所有元素。
答案:
clear() -
使用________方法可以判断一个集合是否是另一个集合的子集。
答案:
issubset() -
使用________方法可以判断两个集合是否没有交集。
答案:
isdisjoint() -
集合的并集操作符是________。
答案:
| -
集合的交集操作符是________。
答案:
&
三、编程题(共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),接受一个列表作为参数,完成以下操作:
- 将列表转换为集合并去重。
- 添加元素
10到集合中。 - 移除元素
2(如果存在)。 - 返回最终的集合。
答案:
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:基因序列比对(集合运算与去重)
项目描述
在生物信息学中,比对两个基因序列的相似性。使用集合的交集和并集计算相似度。
代码实现
# 基因序列(简化为字符串集合)
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集合的经典、避坑与实战
集合的奇妙世界:Python集合的经典、避坑与实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进&#x…...
专业视角深度解析:DeepSeek的核心优势何在?
杭州深度求索(DeepSeek)人工智能基础技术研究有限公司,是一家成立于2023年7月的中国人工智能初创企业,总部位于浙江省杭州市。该公司由量化对冲基金幻方量化(High-Flyer)的联合创始人梁文锋创立,…...
MySQL 索引存储结构
索引是优化数据库查询最重要的方式之一,它是在 MySQL 的存储引擎层中实现的,所以 每一种存储引擎对应的索引不一定相同。我们可以通过下面这张表格,看看不同的存储引擎 分别支持哪种索引类型: BTree 索引和 Hash 索引是我们比较…...
【ComfyUI专栏】如何使用Git命令行安装非Manager收录节点
当前的ComfyUI的收录的自定义节点很多,但是有些节点属于新出来,或者他的应用没有那么广泛,Manager管理节点 有可能没有收录到,这时候 如果我们需要安装需要怎么办呢?这就涉及到我们自己安装这些节点了。例如下面的内容…...
python算法和数据结构刷题[1]:数组、矩阵、字符串
一画图二伪代码三写代码 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中)-CSDN博客 算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn) 面试经典 150 题 - 学习计…...
数据分析系列--④RapidMiner进行关联分析(案例)
一、核心概念 1.项集(Itemset) 2.规则(Rule) 3.支持度(Support) 3.1 支持度的定义 3.2 支持度的意义 3.3 支持度的应用 3.4 支持度的示例 3.5 支持度的调整 3.6 支持度与其他指标的关系 4.置信度࿰…...
1/30每日一题
从输入 URL 到页面展示到底发生了什么? 1. 输入 URL 与浏览器解析 当你在浏览器地址栏输入 URL 并按下回车,浏览器首先会解析这个 URL(统一资源定位符),比如 https://www.example.com。浏览器会解析这个 URL 中的不同…...
vim的多文件操作
[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明:快捷键ctrlshift^,…...
设计转换Apache Hive的HQL语句为Snowflake SQL语句的Python程序方法
首先,根据以下各类HQL语句的基本实例和官方文档记录的这些命令语句各种参数设置,得到各种HQL语句的完整实例,然后在Snowflake的官方文档找到它们对应的Snowflake SQL语句,建立起对应的关系表。在这个过程中要注意HQL语句和Snowfla…...
CAPL与外部接口
CAPL与外部接口 目录 CAPL与外部接口1. 引言2. CAPL与C/C++交互2.1 CAPL与C/C++交互简介2.2 CAPL与C/C++交互实现3. CAPL与Python交互3.1 CAPL与Python交互简介3.2 CAPL与Python交互实现4. CAPL与MATLAB交互4.1 CAPL与MATLAB交互简介4.2 CAPL与MATLAB交互实现5. 案例说明5.1 案…...
无公网IP 外网访问 本地部署夫人 hello-algo
hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...
实验四 XML
实验四 XML 目的: 1、安装和使用XML的开发环境 2、认识XML的不同类型 3、掌握XML文档的基本语法 4、了解DTD的作用 5、掌握DTD的语法 6、掌握Schema的语法 实验过程: 1、安装XML的编辑器,可以选择以下之一 a)XMLSpy b)VScode,Vs…...
Autosar-Os是怎么运行的?(内存保护)
写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 1.功能概述 以TC397芯片为例,英飞凌芯片集成了MPU模块, MPU模块采用了硬件机…...
题单:冒泡排序1
题目描述 给定 n 个元素的数组(下标从 1 开始计),请使用冒泡排序对其进行排序(升序)。 请输出每一次冒泡过程后数组的状态。 要求:每次从第一个元素开始,将最大的元素冒泡至最后。 输入格式…...
多目标优化策略之一:非支配排序
多目标优化策略中的非支配排序是一种关键的技术,它主要用于解决多目标优化问题中解的选择和排序问题,确定解集中的非支配解(也称为Pareto解)。 关于什么是多目标优化问题,可以查看我的文章:改进候鸟优化算法之五:基于多目标优化的候鸟优化算法(MBO-MO)-CSDN博客 多目…...
Go学习:字符、字符串需注意的点
Go语言与C/C语言编程有很多相似之处,但是Go语言中在声明一个字符时,数据类型与其他语言声明一个字符数据时有一点不同之处。通常,字符的数据类型为 char,例如 :声明一个字符 (字符名称为 ch) 的语句格式为 char ch&am…...
Linux文件原生操作
Linux 中一切皆文件,那么 Linux 文件是什么? 在 Linux 中的文件 可以是:传统意义上的有序数据集合,即:文件系统中的物理文件 也可以是:设备,管道,内存。。。(Linux 管理的一切对象…...
解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)
10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:显式的指示优化器为SQL语句的某个行源指定势。该Hint具体语法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)这里,第一个参数(@qb)为可选参数,指定查询语句块名;第二个参数…...
JavaScript系列(50)--编译器实现详解
JavaScript编译器实现详解 🔨 今天,让我们深入探讨JavaScript编译器的实现。编译器是一个将源代码转换为目标代码的复杂系统,通过理解其工作原理,我们可以更好地理解JavaScript的执行过程。 编译器基础概念 🌟 &…...
大数据相关职位 职业进阶路径
大数据相关职位 & 职业进阶路径 📌 大数据相关职位 & 职业进阶路径 大数据领域涵盖多个方向,包括数据工程、数据分析、数据治理、数据科学等,每个方向的进阶路径有所不同。以下是大数据相关职位的详细解析及其职业进阶关系。 &#…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
