题目描述与分析
题目描述:
请你编写一个程序,判断给定的整数 n 是否存在于给定的集合中。
输入描述:
有多组测试数据,第一行有一个整数 k,代表有 k 组测试数据。
每组数据第一行首先是一个正整数 m,表示集合中元素的数量(1 <= m <= 1000)。
接下来一行包含 m 个整数,表示集合中的元素。
最后一行包含一个整数 n,表示需要进行判断的目标整数。
输出描述:
包含多组输出,每组输出占一行。
如果集合中存在 m,输出“YES”,否则输出“NO”。
输入示例:
2
5
1 2 3 4 5
3
6
1 2 3 4 5 6
7
输出示例:
YES
NO
一、集合
在Python中,集合(set)是一个无序的数据结构,用于存储唯一的元素。集合是基于哈希表实现的,因此它支持高效的成员检查、添加和删除操作。集合非常适合用于去除重复项、进行集合运算如并集、交集、差集和对称差集。
可以使用花括号 {} 或 set() 函数来创建集合:
# 使用花括号创建集合
my_set = {1, 2, 3, 4, 5}
print(my_set)
# 使用set()函数创建集合,通常用于将列表转换为集合
my_list = [1, 2, 2, 3, 4]
my_set = set(my_list)
print(my_set) # 输出 {1, 2, 3, 4}
集合最常见的用法是判断某个元素是否在集合中和去除集合中的重复元素。
判断某个元素是否在集合中可以使用in关键字
my_set = {"Tom", "Jerry", "Mike"}
# 判断元素是否在集合中
if "Tom" in my_set:
# 集合用于存储一组不重复的元素,可以自动去重
my_list = [1, 2, 3, 3, 4, 5, 5]
my_set = set(my_list) # 将列表转换为集合,去除重复元素
unique_list = list(my_set) # 将集合转换回列表, 此时列表是[1,2,3,4,5]
类似于数学中的操作,集合还支持求并集、交集、差集、对称差集。
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# 交集
print(a & b) # 输出 {3, 4}
print(a.intersection(b)) # 同上
# 并集
print(a | b) # 输出 {1, 2, 3, 4, 5, 6}
print(a.union(b)) # 同上
# 差集
print(a - b) # 输出 {1, 2}
print(a.difference(b)) # 同上
# 对称差集(元素在a或b中,但不会同时出现在二者中)
print(a ^ b) # 输出 {1, 2, 5, 6}
print(a.symmetric_difference(b)) # 同上
二、集合的常用方法
除了以上两种常见的操作,set还提供了一些常见方法方便使用,主要包括的就是集合的增删和遍历操作。
1.添加元素:使用add()方法可以向集合中添加单个元素。
2.移除元素:使用remove()或者discard()方法可以从集合中移除指定元素, 它们之间的区别在于当移除一个集合中不存在的元素时,remove()会引起异常,而discard()不会。
3.集合长度:使用len()函数可以获取集合的元素个数。
4.清空集合:使用clear()方法可以清空集合中的所有元素。
5.遍历集合:使用for循环可以遍历集合中的元素。
# 创建集合
set1 = {1, 2, 3}
# 向集合添加元素
set1.add(4)
# 遍历集合
for element in set1:
print(element)
# 移除集合元素
set1.remove(3)
# 获取集合长度
print(len(set1))
# 清空集合中的元素
set1.clear()
三、代码编写
根据题目要求,首先需要读取k,表示测试用例的数量,然后迭代k次
k = int(input()) # 读取测试用例的数量
for _ in range(k):
遍历 k 组数据,每组数据第一行首先是一个正整数 m, 表示集合中元素的数量
m = int(input()) # 读取集合中元素的数量
类似于列表的读取,这里需要读取一行作为字符串,将之拆分成列表,并转为整数,最后使用set()转换成整数集合
elements = set(map(int, input().split())) # 读取集合中的元素,用空格分隔并转换为整数集合
最后一行包含一个整数 n,表示需要进行判断的目标整数,可以使用in进行判断,如果在集合中,输出Yes, 如果不在集合中,输出No
n = int(input()) # 读取需要判断的目标整数
# in 判断 目标整数 是否在集合中
if n in elements:
print("YES")
else:
print("NO")
完整代码如下:
k = int(input()) # 读取测试用例的数量
for _ in range(k):
m = int(input()) # 读取集合中元素的数量
elements = set(map(int, input().split())) # 读取集合中的元素,用空格分隔并转换为整数集合
n = int(input()) # 读取需要判断的目标整数
if n in elements:
print("YES")
else:
print("NO")