# 集合

# 选择题

# 1. 题目

需要对集合x = {1, 6, 2, 4, 3, 5}中的元素进行排序,下列说法正确的是(  )
A.可以用sorted(x)排序,结果为一列表
B.可以用x.sort()排序,结果为一有序集合
C.可以用sorted(x)排序,结果为一有序集合
D.可以用x.sort()排序,结果为一列表

答案:A

选项 Asorted() 是 Python 内置全局排序函数,支持对所有可迭代对象(包括集合)进行排序,返回值固定为列表,正确。

选项 B:集合没有 sort() 方法,且 Python 中不存在 “有序集合” 的默认类型,错误。

选项 Csorted() 函数的返回值是列表,而非集合,错误。

选项 D:集合没有 sort() 方法,无法调用该方法执行排序操作,错误。


# 2. 题目

已知集合set1 = {(1, 'b'), (3, 'c'), (4, 'd'), (2, 'a')},语句sorted(set1,key=lambda x:x[1])的结果为___________________.
A.[(2, 'a'), (1, 'b'), (3, 'c'), (4, 'd')]
B.[(1, 'b'), (2, 'a'), (3, 'c'), (4, 'd')]
C.{(2, 'a'), (1, 'b'), (3, 'c'), (4, 'd')}
D.{(1, 'b'), (2, 'a'), (3, 'c'), (4, 'd')}

答案:A

选项 Asorted() 函数返回值固定为列表,且 key=lambda x:x[1] 表示按元组的第二个元素(字符串)升序排序,结果为 [(2, 'a'), (1, 'b'), (3, 'c'), (4, 'd')],正确。

选项 B:排序顺序错误,(2, 'a') 应该排在 (1, 'b') 之前,错误。

选项 Csorted() 函数返回值是列表,不是集合,错误。

选项 Dsorted() 函数返回值是列表,不是集合,且排序顺序错误,错误。


# 判断题

# 1. 题目

字典可以作为集合的元素。   (  )

答案:错

解析:集合的元素必须是可哈希对象,而字典是可变对象,不可哈希,因此字典不能作为集合的元素。


# 2. 题目

已知AB为两个集合,若AB一定为True.   (   )

答案:错

解析:题目表述不完整,假设是 A.issubset(B) 或类似操作,并非对于任意两个集合都一定为 True,需要根据集合的实际元素来判断。


# 3. 题目

表达式 {1, 3, 2} > {1, 2, 3} 的值为True(   )

答案:错

解析:Python 中的集合是无序的,{1, 3, 2} 和 {1, 2, 3} 是相等集合。集合的 > 运算符用于判断前一个集合是否是后一个集合的真超集,相等集合之间不存在真超集关系,因此表达式的值为 False。


# 4. 题目

集合只能包含不可变数据,不能包含可变数据. (   )

答案:对

解析:集合的元素必须是可哈希对象(即不可变对象),这样才能保证集合的唯一性和高效的查找效率。可变对象(如列表、字典)不可哈希,不能作为集合的元素。


# 5. 题目

集合的元素可以是列表.   (  )

答案:错

解析:列表是可变对象,不可哈希,而集合的元素必须是可哈希对象,因此列表不能作为集合的元素。


# 6. 题目

已知 x = {1, 2, 3},那么执行语句 x.add(3) 之后,x的值为{1, 2, 3, 3}(   )

答案:错

解析:集合的核心特性是元素唯一,不允许重复。执行 x.add(3) 时,由于 3 已经存在于集合中,集合不会发生任何变化,x 的值仍然是 {1, 2, 3}。


# 7. 题目

集合中的元素可以重复.  (  )

答案:错

解析:集合是无序且不包含重复元素的容器,无论通过何种方式向集合中添加元素,集合都不会保留重复项。


# 8. 题目

字典和集合属于无序序列.  (  )

答案:对

解析:在 Python 中,字典和集合都是无序的容器类型,它们的元素存储顺序不遵循插入顺序(Python 3.7 + 虽保留字典插入顺序,但本质仍不是序列类型)。


# 9. 题目

set([1, 3, 4, 5, 2, 3, 6, 7])和集合{1, 3, 4, 5, 2, 3, 6, 7}相等.(   )

答案:错

解析:题目表述的错误在于:{1, 3, 4, 5, 2, 3, 6, 7} 本身不是 “原始输入的集合”,而是一个 “带有重复元素的非法集合字面量书写形式”。集合的本质是不允许重复元素的,因此不存在 “包含重复 3 的集合”,这个书写形式本身是不符合集合定义的。


# 10. 题目

字典可以作为集合的元素.  (    )

答案:错

解析:集合的元素必须是可哈希对象,而字典是可变对象,不可哈希,因此字典不能作为集合的元素。


# 填空题

# 1. 题目

表达式type({3})的值为_________

答案:set

解析{3} 是集合的字面量表示方式, type({3}) 返回该对象的类型,即 set


# 2. 题目

语句set(dict(zip([1, 2], [3, 4])))的结果为_________

答案:{1,2}

解析zip([1, 2], [3, 4]) 生成元组 (1,3)、(2,4); dict() 将这些元组转换为字典 {1: 3, 2: 4}; set() 提取字典的键,得到集合 {1,2}。


# 3. 题目

给定一个列表li = [1,2,3,1,2],请利用集合通过一条语句去除其中的重复数,最终以列表的形式进行输出.这条语句是________

答案:print (list (set (li))

解析set(li) 利用集合的唯一性特性去除列表中的重复元素; list() 将集合转回列表; print() 输出最终结果。


# 4. 题目

语句set(zip([1, 2], [3, 4]))的结果为_______

答案:{(1,3),(2,4)}

解析zip([1, 2], [3, 4]) 生成元组 (1,3)、(2,4); set() 将这些元组作为元素创建集合,得到 {(1,3),(2,4)}。


# 5. 题目

表达式{*range(4), 4, *(5, 6, 7)}的值为_________

答案:

解析*range(4) 展开为 0,1,2,3; *(5, 6, 7) 展开为 5,6,7;加上 4,所有元素组合成集合 {0,1,2,3,4,5,6,7}。


# 6. 题目

表达式 {1, 2, 3} - {3, 4, 5} 的值为_______

答案:{1,2}

解析:集合的 - 运算符用于计算前一个集合相对于后一个集合的差集,即返回包含所有在第一个集合中存在但在第二个集合中不存在的元素的新集合。


# 7. 题目

已知x = [1, 2, 3],那么表达式not (set(x*100)&set(x))的值为_________

答案:False

解析x*100 生成包含 1,2,3 重复 100 次的列表; set(x*100)set(x) 都得到集合 {1,2,3}; set(x*100)&set(x) 计算交集,结果为 {1,2,3}; not 对非空集合返回 False。


# 8. 题目

已知l1 = list({1, 3, 4, 5, 2, 3, 6, 7}),len(l1)的值为______

答案:7

解析:集合 {1, 3, 4, 5, 2, 3, 6, 7} 自动去重后包含 7 个元素(1,2,3,4,5,6,7); list() 将集合转换为列表, len(l1) 返回列表的长度 7。