第3周 Python字典、集合刷题

第3周 Python字典、集合刷题

单击题目,直接跳转到页面刷题,一周后公布答案。

  1. B2125:最高分数的学生姓名
  2. 28:返回字典的键值
  3. 75:字符串转字典
  4. 77:映射字符串中的字母
  5. 87:按条件过滤字典
  6. B3632:集合运算 1
  7. 41:单词相同字符数
  8. 42:嵌套元组唯一元素
  9. 47:字符串中缺失的字母
  10. 83:测试子字符串

1. B2125:最高分数的学生姓名

题目描述

输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。

输入格式

第一行输入一个正整数 N N N( N ≤ 100 N \le 100 N≤100),表示学生人数。

接着输入 N N N 行,每行包括两个整数,代表分数姓名。

分数是一个非负整数,且小于等于 100 100 100;

姓名为一个连续的字符串,中间没有空格,长度不超过 20 20 20。

数据保证所有同学的姓名都不同,而且最高分只有一位同学。

输出格式

获得最高分数同学的姓名。

样例输入 #1

5
87 lilei
99 hanmeimei
97 lily
96 lucy
77 jim

样例输出 #1

hanmeimei

提示

hanmeimei 的分数最高 99 99 99 分。

参考源码:

python 复制代码
n = int(input())
dic = {}
for i in range(n):
    score, name = input().split()
    dic[int(score)] = name
print(dic[max(dic)])

2. 28:返回字典的键值

题目描述

编写一个程序,分别按字母顺序返回字典的键和值。

定义函数get_sorted_keys_values(),参数为dict_obj(字典类型)。

在函数内部,返回一个由两个列表组成的列表:一个列表是按字母顺序排列的字典键,另一个列表是它们对应的值。

样例输入 #1

{"john": 1, "peter": 2, "adam": 3}

样例输出 #1

[['adam', 'john', 'peter'], [3, 1, 2]]

参考源码:

python 复制代码
def get_sorted_keys_values(dict_obj):
    # 此处写你的代码
    list1 = sorted(dict_obj.items(), key=lambda x: x[0])
    a = [x for (x, y) in list1]
    b = [y for (x, y) in list1]
    return [a, b]

# 获取用户输入转为字典
dictionary = eval(input())

# 调用函数
print(get_sorted_keys_values(dictionary))

3. 75:字符串转字典

题目描述

编写一个程序将字符串转换为字典。

定义函数convert_str_list_to_dict(),参数为str_list(输入的字符串)。

在函数内部,创建一个字典,其中每个字符串使用=进行分割,第一部分为键,第二部分为值。返回字典。

样例输入 #1

5=Five 6=Six 7=Seven

样例输出 #1

{'5': 'Five', '6': 'Six', '7': 'Seven'}

参考源码:

python 复制代码
def convert_str_list_to_dict(str_list):
    # 此处编写代码 
    list1 = str_list.split()
    dic = {}
    for s in list1:
        a, b = s.split('=')
        dic[a] = b
    return dic
# 输入字符串 
str_list = input()

# 调用函数 
print(convert_str_list_to_dict(str_list))

4. 77:映射字符串中的字母

题目描述

编写一个程序,创建一个字典,其中给定单词的每个唯一字母表示一个键,值为字母出现的索引的列表。

定义函数letter_indices(),参数为word(字符串)。

在函数中,创建一个字典,其中键是单词中的唯一字母,值是包含该字母出现的索引的列表。返回该字典。

样例输入 #1

pineapple

样例输出 #1

{'p': [0, 5, 6], 'i': [1], 'n': [2], 'e': [3, 8], 'a': [4], 'l': [7]}

解释:

给定字符串中的唯一字母是p,i,e,a和l,它们是字典的键。 而键的值是它们出现的索引(注意索引从0开始)。

参考源码:

python 复制代码
def letter_indices(word):
    # 此处编写代码 
    dic = {}
    for i in range(len(word)):
        if dic.get(word[i]) == None:
            dic[word[i]] = [i]
        else:
            ls = dic.get(word[i])
            ls.append(i)
            dic[word[i]] = ls
    return dic
# 获取输入 
word = input()

# 调用函数 
print(letter_indices(word))

5. 87:按条件过滤字典

题目描述

编写一个程序,根据某个条件过滤字典值。

对于这个挑战,条件是字典值应该大于整数k。

定义函数filter_dict_values(),有两个参数:字典mixed_dict和整数k。

在函数内部,创建一个新字典,并从mixed_dict过滤值不是整数或大于整数k的键值对,然后存储到新字典中。返回新字典。

样例输入 #1

{'cat': 2, 'dog': 5, 'parrot': 'yellow', 'fish': 1}
3

样例输出 #1

{'dog': 5, 'parrot': 'yellow'}

解释:

在输出中,过滤后的字典包含一个大于3(k的输入值)的整数值,以及一个不是整数的值yellow。

参考源码:

python 复制代码
def filter_dict_values(mixed_dict, k):
    # 此处写下你的代码 
    dic = {x:y for x, y in mixed_dict.items() if type(y)!=int or y>k}
    return dic
# 获取输入 
user_dict = eval(input())
user_k = int(input())

# 调用函数 
print(filter_dict_values(user_dict, user_k))

6. B3632:集合运算 1

题目背景

集合是数学中的一个概念,用通俗的话来讲就是:一大堆数在一起就构成了集合。

集合有如下的特性:

  • 无序性:任一个集合中,每个元素的地位都是相同的,元素之间是无序的。
  • 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
  • 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
    元素 a a a 属于集合 A A A 记作 a ∈ A a\in A a∈A,反之则记作 a ∉ A a\notin A a∈/A。
    若一个集合中不存在任何元素,则称该集合为空集,记作 ∅ \varnothing ∅。空集是所有集合的子集。

一个集合内的元素个数称为该集合的大小。 A A A 集合的大小可记作 ∣ A ∣ |A| ∣A∣。

集合 C C C 是集合 A A A 与 B B B 的交集,当且仅当对于任何元素 a ∈ C a\in C a∈C,有 a ∈ A a\in A a∈A 且 a ∈ B a\in B a∈B,并且对于任何元素 b ∉ C b\notin C b∈/C,有 b ∉ A b\notin A b∈/A 或 b ∉ B b\notin B b∈/B。记作 C = A ∩ B C=A\cap B C=A∩B。

集合 C C C 是集合 A A A 与 B B B 的并集,当且仅当对于任何元素 a ∈ C a\in C a∈C,有 a ∈ A a\in A a∈A 或 a ∈ B a\in B a∈B,并且对于任何元素 b ∉ C b\notin C b∈/C,有 b ∉ A b\notin A b∈/A 且 b ∉ B b\notin B b∈/B。记作 C = A ∪ B C=A\cup B C=A∪B。

简单地说,交集是由所有同时属于两个集合的元素所构成的,就像两个集合相交;而并集是由所有属于其中任意一个集合的元素所构成的,就像两个集合合并。

特别地,对于形如 { x ∣ a ≤ x ≤ b } \{x|a\le x\le b\} {x∣a≤x≤b} 的集合,可以记作 [ a , b ] [a,b] [a,b]。其中,如果左侧符号改为小于号,则左侧中括号改为小括号。右侧同理。

题目描述

现在给予两个集合 A A A 和 B B B,均由 0 0 0 到 63 63 63 之间的整数组成。

请依次求出:

  • ∣ A ∣ |A| ∣A∣
  • A ∩ B A\cap B A∩B
  • A ∪ B A\cup B A∪B

输入格式

输入四行。

第一行一个整数 x ( 0 ≤ x ≤ 63 ) x(0\le x \le 63) x(0≤x≤63),表示集合 A A A 的元素个数。

第二行 x x x 个整数 a 1 , . . . a x a_1,...a_x a1,...ax,表示集合 A A A 的各个元素,保证不重复。如果 A A A 是空集,则这一行没有数字。

第三行一个整数 y ( 0 ≤ y ≤ 63 ) y(0\le y \le 63) y(0≤y≤63),表示集合 B B B 的元素个数。

第四行 y y y 个整数 b 1 , . . . b x b_1,...b_x b1,...bx,表示集合 B B B 的各个元素,保证不重复。如果 B B B 是空集,则这一行没有数字。

输出格式

输出三行。

第一行输出一个整数,表示 ∣ A ∣ |A| ∣A∣。

第二行输出若干个整数,表示 A ∩ B A\cap B A∩B 中对应元素,从小到大输出,用空格隔开。如果是空集,则这一行什么也不输出,保留换行。

第三行输出若干个整数,表示 A ∪ B A\cup B A∪B 中对应元素,从小到大输出,用空格隔开。如果是空集,则这一行什么也不输出,保留换行。

样例 #1

样例输入 #1

4
1 3 5 8
3
3 6 8

样例输出 #1

4
3 8
1 3 5 6 8

样例 #2

样例输入 #2

0

4
1 2 3 4

样例输出 #2

0

1 2 3 4

参考源码:

python 复制代码
n = int(input())
a = set(map(int, input().split()))
m = int(input())
b = set(map(int, input().split()))
x = a & b
y = a | b
s1 = s2 = ''
if x:
    s1 = sorted(list(x))
if y:
    s2 = sorted(list(y))
print(n)
print(*s1)
print(*s2)

7. 41:单词相同字符数

题目描述

编写一个程序来计算两个给定单词之间相同字符的数量。

需要考虑字符是区分大小写的(即a和A是不同的字符)。

例如,单词cookie和cool有两个字符相同:c和o。因此,输出应该是2。

另一方面,单词Blow和beer没有相同的字符,因为B和b视为不同的字符。

定义函数shared_chars_count(),有两个参数:word1和word2。

该函数应返回两个单词中相同字母的数量。

样例输入 #1

cookie
cool

样例输出 #1

2

参考源码:

python 复制代码
def shared_chars_count(word1, word2):
    # 此处编写代码
    set1 = set(word1) & set(word2)
    return len(set1)
# 获取输入
word1 = input()
word2 = input()

# 调用函数
print(shared_chars_count(word1, word2))

8. 42:嵌套元组唯一元素

题目描述

编写一个程序来提取嵌套元组中的唯一元素。

例如,在嵌套元组((1,2,3),(2,4,6),(2,3,5))中,2重复出现了3次,3重复出现了2次,但我们的输出列表只会包含2、3一次。即:[1, 2, 3, 4, 5, 6]

  • 定义函数get_unique_elements(),函数接受一个参数 - 一个包含三个元组的嵌套元组。
  • 在函数内,提取所有元组中的独立元素,确保不重复提取元素。
  • 以列表的形式返回唯一的元素,并从小到大排序。

样例输入 #1

1 2 2 3
2 3 3 4
4 5 5 6

样例输出 #1

[1, 2, 3, 4, 5, 6]

参考源码:

python 复制代码
def get_unique_elements(nested_tuples):
    # 此处编写代码
    list1 = []
    for ls in nested_tuples:
        list1.extend(list(ls))
    list1 = list(set(list1))  # 集合,无序不能排序
    list1.sort()
    return list1
# 初始化嵌套元组
nested_tuples = []

# 获取用户输入
for _ in range(3):
    tuple_elements = tuple(map(int, input().split()))
    nested_tuples.append(tuple_elements)

# 调用函数
print(get_unique_elements(nested_tuples))

9. 47:字符串中缺失的字母

题目描述

编写一个程序,返回一个按字母顺序排序的字符串,其中包含给定字符串中不出现的所有小写字母。

定义函数get_missing_letters(),参数为word_string。

在函数内部,返回一个排序的字符串,其中包含不出现在word_string中的所以小写字母。

注意:假设用户只输入小写字母字符串作为输入。

样例输入 #1

stray

样例输出 #1

bcdefghijklmnopquvwxz

解释:

输入字符串"stray"包含英文字母表除"bcdefghijklmnopquvwxz"之外的所有字母。

参考源码:

python 复制代码
import string
def get_missing_letters(word_string):
    # 此处编写你的代码 
    set1 = set(string.ascii_lowercase) - set(word_string)
    list1 = list(set1)
    # list1 = [ch for ch in string.ascii_lowercase if ch not in word_string]
    # s = ''.join(sorted(list1))
    return s
# 获取输入的字符串 
word_string = input()

# 调用函数输出结果 
print(get_missing_letters(word_string))

10. 83:测试子字符串

题目描述

编写一个程序来检查给定的字符串是否为另一个字符串的子集。

定义函数is_subset(),有两个参数:sub_string和main_string(均是字符串)。

在函数内,如果sub_string是main_string的子集,则返回True,否则返回False。

例如,abc是abracadabra的子集,因为abc中的每个字符都在abracadabra中出现。

样例输入 #1

march
charming

样例输出 #1

True

参考源码:

python 复制代码
def is_subset(sub_string, main_string):
    # 在此处编写你的代码
    set1 = set(sub_string)
    set2 = set(main_string)
    return set1.issubset(set2)
# 获取用户输入
sub_string = input()
main_string = input()

# 调用函数
print(is_subset(sub_string, main_string))
相关推荐
捕鲸叉11 分钟前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer15 分钟前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
wheeldown44 分钟前
【数据结构】选择排序
数据结构·算法·排序算法
阡之尘埃1 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
观音山保我别报错2 小时前
C语言扫雷小游戏
c语言·开发语言·算法
TangKenny3 小时前
计算网络信号
java·算法·华为
景鹤3 小时前
【算法】递归+深搜:814.二叉树剪枝
算法
iiFrankie3 小时前
SCNU习题 总结与复习
算法
丕羽4 小时前
【Pytorch】基本语法
人工智能·pytorch·python
Dola_Pan4 小时前
C++算法和竞赛:哈希算法、动态规划DP算法、贪心算法、博弈算法
c++·算法·哈希算法