本文目录导读:

在Python中求取数据交集有多种方法,主要取决于你使用的数据结构,以下是几种常见情况的案例:
列表(List)求交集
方法1:转换为集合
list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 转换为集合求交集 intersection = list(set(list1) & set(list2)) print(intersection) # 输出:[4, 5]
方法2:列表推导式(保持顺序)
list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8] # 保持list1的原始顺序 intersection = [item for item in list1 if item in list2] print(intersection) # 输出:[4, 5]
集合(Set)求交集
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# 方法1:使用 & 运算符
intersection1 = set1 & set2
print(intersection1) # 输出:{4, 5}
# 方法2:使用 intersection() 方法
intersection2 = set1.intersection(set2)
print(intersection2) # 输出:{4, 5}
字典(Dictionary)求交集
求键的交集
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 4, 'c': 5, 'd': 6}
# 求键的交集
common_keys = dict1.keys() & dict2.keys()
print(common_keys) # 输出:{'b', 'c'}
# 获取交集键对应的值(从dict1)
intersection_dict = {key: dict1[key] for key in common_keys}
print(intersection_dict) # 输出:{'b': 2, 'c': 3}
多个数据集的交集
# 多个列表求交集
list1 = [1, 2, 3, 4, 5]
list2 = [2, 4, 6, 8, 10]
list3 = [2, 4, 6]
# 使用 reduce 函数
from functools import reduce
intersection = reduce(lambda x, y: set(x) & set(y), [list1, list2, list3])
print(intersection) # 输出:{2, 4}
实际应用案例
案例:找出共同好友
friends_a = ['Tom', 'Jerry', 'Spike', 'Tyke']
friends_b = ['Jerry', 'Spike', 'Butch', 'Toodles']
# 求共同好友
common_friends = set(friends_a) & set(friends_b)
print(f"共同好友:{common_friends}")
# 输出:共同好友:{'Jerry', 'Spike'}
案例:文件内容交集
# 假设有两个文件内容
file1_content = "apple,banana,orange,grape"
file2_content = "banana,grape,watermelon,kiwi"
# 分割成列表并求交集
list1 = file1_content.split(',')
list2 = file2_content.split(',')
intersection = set(list1) & set(list2)
print(f"共同水果:{intersection}")
# 输出:共同水果:{'banana', 'grape'}
性能建议
- 小数据集(<10000个元素):使用列表推导式或直接转换集合
- 大数据集:始终使用集合(set)操作,因为集合的查找时间复杂度为O(1)
- 需要保持顺序:使用列表推导式,但性能较低
# 性能测试示例
import time
big_list1 = list(range(100000))
big_list2 = list(range(50000, 150000))
start = time.time()
intersection = set(big_list1) & set(big_list2)
print(f"集合方法耗时:{time.time() - start:.4f}秒")
start = time.time()
intersection = [item for item in big_list1 if item in big_list2]
print(f"列表推导式耗时:{time.time() - start:.4f}秒")
选择哪种方法取决于你的具体需求:数据类型、是否需要保持顺序、数据量大小等。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播