MST

星途 面试题库

面试题:Python集合(set)在去重和逻辑运算中的高级应用

给定两个列表,列表中包含大量的整数,其中有重复元素。首先,使用集合的特性对列表元素进行去重。然后,运用集合的逻辑运算(交集、并集、差集),找出两个列表中相同的元素、所有的元素以及只在其中一个列表中出现的元素。要求代码简洁高效,并解释集合在这些操作中的优势和原理。
28.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
list1 = [1, 2, 2, 3, 4, 4, 5]
list2 = [3, 3, 4, 5, 6, 7]

set1 = set(list1)
set2 = set(list2)

# 相同的元素(交集)
common_elements = set1.intersection(set2)  
# 所有的元素(并集)
all_elements = set1.union(set2)  
# 只在其中一个列表中出现的元素(对称差集)
unique_elements = set1.symmetric_difference(set2)  

print("相同的元素:", common_elements)
print("所有的元素:", all_elements)
print("只在其中一个列表中出现的元素:", unique_elements)

集合在这些操作中的优势和原理

  1. 优势
    • 去重高效:集合中的元素具有唯一性,将列表转换为集合时,重复元素会自动被去除,这比手动遍历列表去重的代码更简洁,并且在时间复杂度上通常更优(平均情况下,向集合中添加元素的时间复杂度接近 O(1),而手动遍历去重时间复杂度为 O(n))。
    • 逻辑运算简洁:集合提供了直接的交集、并集、差集等逻辑运算方法,代码简洁明了,易于理解和编写。
  2. 原理
    • 交集:集合的交集运算,是找出同时存在于两个集合中的元素。其原理是通过对两个集合的元素进行比对,保留共同的元素。在实现上,集合通常采用哈希表等数据结构,查找元素的时间复杂度平均为 O(1),因此交集运算的时间复杂度为 O(min(len(set1), len(set2)))。
    • 并集:并集运算是将两个集合中的所有元素合并在一起,去除重复元素。它会遍历两个集合,将所有元素添加到一个新的集合中,时间复杂度为 O(len(set1) + len(set2))。
    • 差集:差集运算会找出只在一个集合中存在,而不在另一个集合中存在的元素。对于set1 - set2,会遍历set1,检查每个元素是否在set2中,若不在则保留,时间复杂度为 O(len(set1))(假设查找set2中的元素平均时间复杂度为 O(1))。对称差集set1.symmetric_difference(set2)则是找出只在其中一个集合中出现的元素,它等同于(set1 - set2).union(set2 - set1),时间复杂度为 O(len(set1) + len(set2))。