Python列表·元组·集合·字典 中职专项练习题

📖 使用说明

1. 题目来源:基于《Python编程谜题100题》精选改编,剔除正则、栈、复杂算法等超纲内容,保留全部适合中职计算机专业的题目,共83道;

2. 知识覆盖:全面覆盖四大容器——列表list、元组tuple、集合set、字典dict的基础操作、常用方法与综合应用;

3. 难度划分: 入门·易 基础语法与方法调用,适合新授课随堂练习; 进阶·中 推导式、排序、统计逻辑,适合课后作业; 综合·难 多结构混合与场景应用,适合单元实训;

4. 每道题配套:题目描述、测试用例、可直接运行的参考代码、中职教学适配的知识点解析。

📚 全文目录

  1. 第一部分 入门级 · 基础操作(30题)
    1. 模块1:列表基础操作
    2. 模块2:元组与嵌套容器
    3. 模块3:集合基础操作
    4. 模块4:字典基础操作
    5. 模块5:字符串与容器基础结合
  2. 第二部分 进阶级 · 方法与逻辑(35题)
    1. 模块1:列表推导式与遍历进阶
    2. 模块2:排序与最值进阶
    3. 模块3:集合运算与去重应用
    4. 模块4:字典统计与映射应用
    5. 模块5:数字与逻辑综合
  3. 第三部分 综合级 · 多结构混合应用(18题)
  4. 附录:四大容器核心知识点汇总表

第一部分 入门级 · 基础操作

模块1:列表基础操作
第1题 统计指定数字出现次数

题目描述:判断一个整数列表中,数字19恰好出现2次,且数字5至少出现3次。满足条件返回True,否则返回False。

测试用例:
输入:[19, 19, 15, 5, 3, 5, 5, 2] → 输出:True
输入:[19, 15, 15, 5, 3, 3, 5, 2] → 输出:False
输入:[19, 19, 5, 5, 5, 5, 5] → 输出:True
def check_nineteen_and_five(num_list):
    return num_list.count(19) == 2 and num_list.count(5) >= 3

if __name__ == "__main__":
    print(check_nineteen_and_five([19, 19, 15, 5, 3, 5, 5, 2]))
    print(check_nineteen_and_five([19, 15, 15, 5, 3, 3, 5, 2]))
    print(check_nineteen_and_five([19, 19, 5, 5, 5, 5, 5]))
知识点:列表count()方法统计元素出现次数;逻辑运算符and的使用;布尔值返回。
第2题 校验列表长度与元素频次

题目描述:接收一个整数列表,判断列表长度是否为8,且列表的第5个元素(下标4)在列表中至少出现3次。

测试用例:
输入:[19, 19, 15, 5, 5, 5, 1, 2] → 输出:True
输入:[19, 15, 5, 7, 5, 5, 2] → 输出:False
输入:[11, 12, 14, 13, 14, 13, 15, 14] → 输出:True
def check_fifth_element(num_list):
    if len(num_list) != 8:
        return False
    fifth_item = num_list[4]
    return num_list.count(fifth_item) >= 3

if __name__ == "__main__":
    print(check_fifth_element([19, 19, 15, 5, 5, 5, 1, 2]))
    print(check_fifth_element([19, 15, 5, 7, 5, 5, 2]))
    print(check_fifth_element([11, 12, 14, 13, 14, 13, 15, 14]))
知识点:len()获取列表长度;下标索引访问元素;条件分支判断。
第3题 数字条件判断

题目描述:接收一个整数,判断该数是否大于4的4次方(256),且该数对34取余的结果等于4。

测试用例:
输入:922 → 输出:True
输入:914 → 输出:False
输入:854 → 输出:True
def check_num_condition(num):
    return num > 4 ** 4 and num % 34 == 4

if __name__ == "__main__":
    print(check_num_condition(922))
    print(check_num_condition(914))
    print(check_num_condition(854))
知识点:幂运算**;取余运算%;复合条件判断。
第4题 生成等差石子堆

题目描述:创建n堆石子:第一堆有n个石子,所有堆奇偶性一致,每堆比前一堆多2个(增量最小),返回每堆石子数量列表。

测试用例:
输入:2 → 输出:[2, 4]
输入:10 → 输出:[10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
输入:3 → 输出:[3, 5, 7]
def stone_piles(n):
    return [n + 2 * i for i in range(n)]

if __name__ == "__main__":
    print(stone_piles(2))
    print(stone_piles(10))
    print(stone_piles(3))
知识点:列表推导式基础用法;range()生成序列;等差数列生成逻辑。
第5题 校验相邻元素差值

题目描述:校验整数列表是否所有相邻元素之间的差值都为10。满足返回True,否则返回False。

测试用例:
输入:[0,10,20,30,40] → 输出:True
输入:[0,20,40,60] → 输出:False
def check_diff_ten(num_list):
    for i in range(1, len(num_list)):
        if abs(num_list[i] - num_list[i-1]) != 10:
            return False
    return True

if __name__ == "__main__":
    print(check_diff_ten([i * 10 for i in range(10)]))
    print(check_diff_ten([i * 20 for i in range(5)]))
知识点:列表按索引遍历;abs()求绝对值;相邻元素比较逻辑。
第6题 前缀累加校验

题目描述:校验整数列表是否对于每一个下标i,前i个整数的和等于i。全部满足返回True,否则返回False。

测试用例:
输入:[0, 1, 2, 3, 4, 5] → 输出:False
输入:[1, 1, 1, 1, 1, 1] → 输出:True
输入:[2, 2, 2, 2, 2] → 输出:False
def check_sum_equal_index(num_list):
    total = 0
    for idx, num in enumerate(num_list):
        total += num
        if total != idx:
            return False
    return True

if __name__ == "__main__":
    print(check_sum_equal_index([0, 1, 2, 3, 4, 5]))
    print(check_sum_equal_index([1, 1, 1, 1, 1, 1]))
    print(check_sum_equal_index([2, 2, 2, 2, 2]))
知识点:enumerate()同时获取下标和元素;累加变量的使用;循环中提前返回。
第7题 生成数字字符串

题目描述:生成一个由0到n(包含n)的非负整数组成的、空格分隔的字符串。

测试用例:
输入:4 → 输出:"0 1 2 3 4"
输入:15 → 输出:"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
def generate_num_string(n):
    return " ".join(str(i) for i in range(n + 1))

if __name__ == "__main__":
    print(generate_num_string(4))
    print(generate_num_string(15))
知识点:join()拼接字符串;str()类型转换;range()区间生成。
第8题 特殊字符串拆分

题目描述:处理输入字符串:有空格按空格拆分;无空格有逗号按逗号拆分;都没有则返回奇数下标的小写字母列表。

测试用例:
输入:"a b c d" → 输出:['a', 'b', 'c', 'd']
输入:"a,b,c,d" → 输出:['a', 'b', 'c', 'd']
输入:"abcd" → 输出:['b', 'd']
def special_string_split(input_str):
    if " " in input_str:
        return input_str.split()
    elif "," in input_str:
        return input_str.split(",")
    else:
        return [input_str[i].lower() for i in range(1, len(input_str), 2)]

if __name__ == "__main__":
    print(special_string_split("a b c d"))
    print(special_string_split("a,b,c,d"))
    print(special_string_split("abcd"))
知识点:split()字符串拆分;多分支条件判断;步长为2的切片遍历。
模块2:元组与嵌套容器
第9题 不规则矩阵查找目标坐标

题目描述:不规则矩阵(每行元素个数不同),找出目标值在矩阵中所有出现位置的[行号, 列号]索引。

测试用例:
输入:矩阵([1, 3, 2, 32, 19], [19, 2, 48, 19], [], [9, 35, 4], [3, 19]),目标19 → 输出:[[0, 4], [1, 0], [1, 3], [4, 1]]
输入:矩阵([1, 2, 3, 2], [], [7, 9, 2, 1, 4]),目标2 → 输出:[[0, 1], [0, 3], [2, 2]]
def find_target_in_ragged_matrix(matrix, target):
    index_list = []
    for row_idx, row in enumerate(matrix):
        for col_idx, value in enumerate(row):
            if value == target:
                index_list.append([row_idx, col_idx])
    return index_list

if __name__ == "__main__":
    print(find_target_in_ragged_matrix(([1, 3, 2, 32, 19], [19, 2, 48, 19], [], [9, 35, 4], [3, 19]), 19))
    print(find_target_in_ragged_matrix(([1, 2, 3, 2], [], [7, 9, 2, 1, 4]), 2))
知识点:元组/列表的嵌套遍历;enumerate()双层使用;元组不可变特性。
第10题 两列表总字符数对比

题目描述:比较两个字符串列表,返回总字符数更少的那个列表。

测试用例:
输入:[['this', 'list', 'is', 'narrow'], ['I', 'am', 'shorter but wider']] → 输出:['this', 'list', 'is', 'narrow']
def fewer_total_chars_list(list_group):
    list1, list2 = list_group
    total1 = sum(len(s) for s in list1)
    total2 = sum(len(s) for s in list2)
    return list1 if total1 < total2 else list2

if __name__ == "__main__":
    print(fewer_total_chars_list([['this', 'list', 'is', 'narrow'], ['I', 'am', 'shorter but wider']]))
知识点:sum()结合生成器表达式;三元表达式;列表总长度计算。
模块3:集合基础操作
第11题 校验元素种类与连续重复

题目描述:判断整数列表是否恰好包含4种不同的数值,且前20个元素中没有连续重复的整数。

测试用例:
输入:[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] → 输出:True
输入:[1, 2, 3, 3, 1, 2, 3, 3] → 输出:False
输入:[1, 2, 3, 1, 2, 3] → 输出:False
def check_four_unique_no_consecutive(num_list):
    if len(set(num_list)) != 4:
        return False
    check_part = num_list[:20]
    for i in range(1, len(check_part)):
        if check_part[i] == check_part[i-1]:
            return False
    return True

if __name__ == "__main__":
    print(check_four_unique_no_consecutive([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]))
    print(check_four_unique_no_consecutive([1, 2, 3, 3, 1, 2, 3, 3, 1, 2, 3, 3, 1, 2, 3, 3]))
    print(check_four_unique_no_consecutive([1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]))
知识点:set()快速去重统计元素种类;列表切片;连续元素判断。
第12题 忽略大小写去重

题目描述:忽略字符串的大小写,找出其中所有不同的字符,返回字符列表。

测试用例:
输入:"HELLO" → 输出:['h', 'o', 'l', 'e']
输入:"HelLo" → 输出:['h', 'o', 'l', 'e']
def distinct_char_ignore_case(input_str):
    return list(set(input_str.lower()))

if __name__ == "__main__":
    print(distinct_char_ignore_case("HELLO"))
    print(distinct_char_ignore_case("HelLo"))
知识点:lower()统一大小写;set()去重;字符串与集合、列表的类型转换。
模块4:字典基础操作
第13题 按前缀筛选字符串

题目描述:从字符串序列中,筛选出所有以指定前缀开头的字符串。

测试用例:
前缀"ca",序列('cat', 'car', 'fear', 'center') → 输出:['cat', 'car']
前缀"do",序列('cat', 'dog', 'shatter', 'donut', 'at', 'todo') → 输出:['dog', 'donut']
def filter_by_prefix(prefix, str_sequence):
    return [s for s in str_sequence if s.startswith(prefix)]

if __name__ == "__main__":
    print(filter_by_prefix("ca", ('cat', 'car', 'fear', 'center')))
    print(filter_by_prefix("do", ('cat', 'dog', 'shatter', 'donut', 'at', 'todo')))
知识点:字符串startswith()方法;列表推导式筛选;元组遍历。
第14题 字符串长度列表

题目描述:接收一个非空字符串列表,返回每个字符串的长度组成的列表。

测试用例:
输入:['cat', 'car', 'fear', 'center'] → 输出:[3, 3, 4, 6]
def get_string_lengths(str_list):
    return [len(s) for s in str_list]

if __name__ == "__main__":
    print(get_string_lengths(['cat', 'car', 'fear', 'center']))
知识点:len()获取字符串长度;列表推导式基础应用。
第15题 按子串筛选字符串

题目描述:从字符串序列中,筛选出所有包含指定子串的字符串。

测试用例:
子串"ca",序列('cat', 'car', 'fear', 'center') → 输出:['cat', 'car']
子串"o",序列('cat', 'dog', 'donut', 'todo') → 输出:['dog', 'donut', 'todo']
def filter_by_substring(sub_str, str_sequence):
    return [s for s in str_sequence if sub_str in s]

if __name__ == "__main__":
    print(filter_by_substring("ca", ('cat', 'car', 'fear', 'center')))
    print(filter_by_substring("o", ('cat', 'dog', 'shatter', 'donut', 'at', 'todo', '')))
知识点:in关键字判断子串包含关系;列表推导式条件筛选。
第16题 找出大小写特殊的字典键

题目描述:找出字典中大小写格式与其他所有键不同的那个键。

测试用例:
输入:{'red': '', 'GREEN': '', 'blue': 'orange'} → 输出:GREEN
输入:{'RED': '', 'GREEN': '', 'orange': '#125GD'} → 输出:orange
def find_odd_case_key(dict_data):
    keys = list(dict_data.keys())
    lower_count = 0
    upper_count = 0
    lower_key = ""
    upper_key = ""
    for key in keys:
        if key.islower():
            lower_count += 1
            lower_key = key
        elif key.isupper():
            upper_count += 1
            upper_key = key
    if lower_count == 1:
        return lower_key
    elif upper_count == 1:
        return upper_key
    else:
        return None

if __name__ == "__main__":
    print(find_odd_case_key({'red': '', 'GREEN': '', 'blue': 'orange'}))
    print(find_odd_case_key({'RED': '', 'GREEN': '', 'orange': '#125GD'}))
知识点:字典keys()获取所有键;islower()/isupper()判断大小写;统计计数逻辑。
模块5:字符串与容器基础结合
第17题 回文字符串批量判断

题目描述:批量判断字符串列表是否为回文字符串,返回一一对应的布尔值列表。

测试用例:
输入:['palindrome', 'madamimadam', '', 'foo', 'eyes'] → 输出:[False, True, True, False, False]
def check_palindrome_list(str_list):
    return [s == s[::-1] for s in str_list]

if __name__ == "__main__":
    print(check_palindrome_list(['palindrome', 'madamimadam', '', 'foo', 'eyes']))
知识点:字符串切片[::-1]反转;回文判断逻辑;列表推导式。
第18题 找出最长字符串

题目描述:找出字符串列表中长度最长的字符串。

测试用例:
输入:['cat', 'car', 'fear', 'center'] → 输出:center
def get_longest_string(str_list):
    if not str_list:
        return ""
    return max(str_list, key=lambda x: len(x))

if __name__ == "__main__":
    print(get_longest_string(['cat', 'car', 'fear', 'center']))
知识点:max()函数的key参数;lambda匿名函数入门。
第19题 大写字母ASCII码求和

题目描述:计算给定字符串中所有大写字母的ASCII码值之和。

测试用例:
输入:"PytHon ExerciSEs" → 输出:373
输入:"JavaScript" → 输出:157
def sum_uppercase_ascii(input_str):
    total = 0
    for char in input_str:
        if char.isupper():
            total += ord(char)
    return total

if __name__ == "__main__":
    print(sum_uppercase_ascii("PytHon ExerciSEs"))
    print(sum_uppercase_ascii("JavaScript"))
知识点:isupper()判断大写字母;ord()获取字符ASCII码;累加求和。
第20题 找出数值下降位置

题目描述:找出列表中数值发生下降的位置的索引(当前元素小于前一个元素的下标)。

测试用例:
输入:[6, 5, 4, 3, 2, 1] → 输出:[1, 2, 3, 4, 5]
def get_drop_indices(num_list):
    drop_idx = []
    for i in range(1, len(num_list)):
        if num_list[i] < num_list[i-1]:
            drop_idx.append(i)
    return drop_idx

if __name__ == "__main__":
    print(get_drop_indices([6, 5, 4, 3, 2, 1]))
知识点:列表按索引遍历;相邻元素比较;append()添加元素。
第21题 滚动最大值列表

题目描述:生成一个新列表,第i个元素是输入列表前i个元素中的最大值。

测试用例:
输入:[6, 5, 4, 3, 2, 1] → 输出:[6, 6, 6, 6, 6, 6]
def running_max_list(num_list):
    if not num_list:
        return []
    result = []
    current_max = num_list[0]
    for num in num_list:
        current_max = max(current_max, num)
        result.append(current_max)
    return result

if __name__ == "__main__":
    print(running_max_list([6, 5, 4, 3, 2, 1]))
知识点:max()函数比较大小;滚动变量记录当前最大值;列表生成。
第22题 二进制字符串异或

题目描述:将两个二进制字符串按位异或,以0b开头的二进制格式输出。

测试用例:
输入:['0001', '1011'] → 输出:0b1010
def binary_string_xor(bin_str_list):
    num1 = int(bin_str_list[0], 2)
    num2 = int(bin_str_list[1], 2)
    return bin(num1 ^ num2)

if __name__ == "__main__":
    print(binary_string_xor(['0001', '1011']))
知识点:int(字符串, 2)二进制转十进制;bin()转二进制字符串;异或运算符^。
第23题 解析逗号小数点取最大值

题目描述:将字符串中的逗号和句号都视为小数点,解析为数字,返回其中最大的数值。

测试用例:
输入:['100', '102,1', '101.1'] → 输出:102.1
def get_max_number_with_comma_dot(str_list):
    num_list = []
    for s in str_list:
        num = float(s.replace(",", "."))
        num_list.append(num)
    return max(num_list)

if __name__ == "__main__":
    print(get_max_number_with_comma_dot(['100', '102,1', '101.1']))
知识点:replace()字符串替换;float()类型转换;max()取最大值。
第24题 找出唯一字符最多的字符串

题目描述:找出字符串列表中,包含唯一字符数量最多的字符串。

测试用例:
输入:['Green', 'Red', 'Orange', 'Yellow', '', 'White'] → 输出:Orange
def most_unique_char_string(str_list):
    if not str_list:
        return ""
    return max(str_list, key=lambda s: len(set(s)))

if __name__ == "__main__":
    print(most_unique_char_string(['Green', 'Red', 'Orange', 'Yellow', '', 'White']))
知识点:set()统计唯一字符数;max+key自定义比较依据。
第25题 序列单调性判断

题目描述:判断数字序列的单调性,返回递增、递减或非单调序列。

测试用例:
输入:[1, 2, 3, 4, 5, 6] → 输出:Increasing.
输入:[6, 5, 4, 3, 2, 1] → 输出:Decreasing.
def check_monotonic_direction(num_list):
    is_increasing = all(num_list[i] <= num_list[i+1] for i in range(len(num_list)-1))
    is_decreasing = all(num_list[i] >= num_list[i+1] for i in range(len(num_list)-1))
    if is_increasing:
        return "Increasing."
    elif is_decreasing:
        return "Decreasing."
    else:
        return "Not a monotonic sequence!"

if __name__ == "__main__":
    print(check_monotonic_direction([1, 2, 3, 4, 5, 6]))
    print(check_monotonic_direction([6, 5, 4, 3, 2, 1]))
知识点:all()函数判断全部满足条件;生成器表达式;多分支判断。
第26题 个位数字乘积

题目描述:计算列表中所有数字的个位数字的乘积。

测试用例:
输入:[12, 23] → 输出:6
输入:[12, 23, 43] → 输出:18
def product_of_units_digits(num_list):
    product = 1
    for num in num_list:
        unit_digit = abs(num) % 10
        product *= unit_digit
    return product

if __name__ == "__main__":
    print(product_of_units_digits([12, 23]))
    print(product_of_units_digits([12, 23, 43]))
知识点:%10取个位数字;abs()取绝对值;累乘计算。
第27题 列表去重保留顺序

题目描述:对整数列表去重,同时保留元素在原列表中的出现顺序。

测试用例:
输入:[1, 3, 4, 10, 4, 1, 43] → 输出:[1, 3, 4, 10, 43]
def deduplicate_preserve_order(num_list):
    seen = set()
    result = []
    for num in num_list:
        if num not in seen:
            seen.add(num)
            result.append(num)
    return result

if __name__ == "__main__":
    print(deduplicate_preserve_order([1, 3, 4, 10, 4, 1, 43]))
知识点:集合辅助去重;列表保留顺序;集合add()添加元素。
第28题 追加数字使总和为0

题目描述:找出需要追加到列表末尾的数字,使得列表所有元素的总和为0。

测试用例:
输入:[1, 2, 3, 4, 5] → 输出:-15
def get_zero_sum_number(num_list):
    return -sum(num_list)

if __name__ == "__main__":
    print(get_zero_sum_number([1, 2, 3, 4, 5]))
知识点:sum()列表求和;简单数学逻辑。
第29题 奇下标偶数之和

题目描述:计算列表中位于奇数下标位置的偶数元素的总和。

测试用例:
输入:[1, 2, 3, 4, 5, 6, 7] → 输出:12
def sum_even_at_odd_index(num_list):
    total = 0
    for idx, num in enumerate(num_list):
        if idx % 2 == 1 and num % 2 == 0:
            total += num
    return total

if __name__ == "__main__":
    print(sum_even_at_odd_index([1, 2, 3, 4, 5, 6, 7]))
知识点:enumerate()下标与元素;多条件复合判断。
第30题 库存与需求量计算

题目描述:对每组[已吃数量、还需数量、库存数量],计算总需求量和剩余库存。

测试用例:
输入:[[2, 5, 6], [3, 9, 22]] → 输出:[[7, 1], [12, 13]]
def stock_appetite_calc(data_groups):
    result = []
    for eaten, need, stock in data_groups:
        total_appetite = eaten + need
        remaining = stock - total_appetite
        result.append([total_appetite, remaining])
    return result

if __name__ == "__main__":
    print(stock_appetite_calc([[2, 5, 6], [3, 9, 22]]))
知识点:嵌套列表遍历;序列解包赋值;业务场景简单计算。

第二部分 进阶级 · 方法与逻辑

模块1:列表推导式与遍历进阶
第31题 筛选小于阈值的元素下标

题目描述:找出列表中所有数值小于指定阈值的元素的下标索引。

测试用例:
列表[0, 12, 45, 3, 4923, 322, 105, 29, 15, 39, 55],阈值100 → 输出:[0, 1, 2, 3, 7, 8, 9, 10]
def get_index_below_threshold(num_list, threshold):
    return [idx for idx, num in enumerate(num_list) if num < threshold]

if __name__ == "__main__":
    print(get_index_below_threshold([0, 12, 45, 3, 4923, 322, 105, 29, 15, 39, 55], 100))
知识点:带条件的列表推导式;enumerate()获取下标;条件筛选。
第32题 偶数回文数筛选

题目描述:找出小于等于n的所有偶数回文数。

测试用例:
输入:50 → 输出:[0, 2, 4, 6, 8, 22, 44]
输入:100 → 输出:[0, 2, 4, 6, 8, 22, 44, 66, 88]
def find_even_palindromes(n):
    result = []
    for num in range(0, n + 1, 2):
        num_str = str(num)
        if num_str == num_str[::-1]:
            result.append(num)
    return result

if __name__ == "__main__":
    print(find_even_palindromes(50))
    print(find_even_palindromes(100))
知识点:步长为2的range遍历;回文字符串判断;列表append追加。
第33题 最小偶数及下标

题目描述:找出数组中最小的偶数数值及其下标;多个相同最小值返回下标最小的;无偶数返回空列表。

测试用例:
输入:[1, 9, 4, 6, 10, 11, 14, 8] → 输出:[4, 2]
输入:[1, 7, 7, 5, 9] → 输出:[]
def min_even_with_index(num_list):
    even_list = [(num, idx) for idx, num in enumerate(num_list) if num % 2 == 0]
    if not even_list:
        return []
    even_list.sort(key=lambda x: (x[0], x[1]))
    min_num, min_idx = even_list[0]
    return [min_num, min_idx]

if __name__ == "__main__":
    print(min_even_with_index([1, 9, 4, 6, 10, 11, 14, 8]))
    print(min_even_with_index([1, 7, 7, 5, 9]))
知识点:列表推导式筛选;元组排序;多关键字排序逻辑。
第34题 首位末位均为奇数的数字筛选

题目描述:筛选列表中大于10,且首位和末位数字均为奇数的数字。

测试用例:
输入:[1, 3, 79, 10, 4, 1, 39, 62] → 输出:[79, 39]
def filter_odd_first_last(num_list):
    result = []
    for num in num_list:
        if num <= 10:
            continue
        num_str = str(abs(num))
        first_digit = int(num_str[0])
        last_digit = int(num_str[-1])
        if first_digit % 2 == 1 and last_digit % 2 == 1:
            result.append(num)
    return result

if __name__ == "__main__":
    print(filter_odd_first_last([1, 3, 79, 10, 4, 1, 39, 62]))
知识点:数字转字符串取首尾位;continue跳过不符合项;多条件判断。
第35题 偶数长度单词排序

题目描述:从单词列表中找出长度为偶数的单词,并按单词长度升序排序。

测试用例:
输入:['Red', 'Black', 'White', 'Green', 'Pink', 'Orange'] → 输出:['Pink', 'Orange']
def sort_even_length_words(word_list):
    even_words = [word for word in word_list if len(word) % 2 == 0]
    return sorted(even_words, key=lambda x: len(x))

if __name__ == "__main__":
    print(sort_even_length_words(['Red', 'Black', 'White', 'Green', 'Pink', 'Orange']))
知识点:列表推导式条件筛选;sorted()自定义排序键;按长度排序。
模块2:排序与最值进阶
第36题 Top K最大数字

题目描述:从数字列表中找出最大的k个数字。

测试用例:
列表[1, 2, 3, 4, 5, 5, 3, 6, 2],k=3 → 输出:[6, 5, 5]
def top_k_largest(num_list, k):
    return sorted(num_list, reverse=True)[:k]

if __name__ == "__main__":
    print(top_k_largest([1, 2, 3, 4, 5, 5, 3, 6, 2], 3))
知识点:sorted()降序排序;列表切片取前k个。
第37题 按数字各位之和排序

题目描述:按照数字各位数之和的大小,对列表中的数字进行升序排序。

测试用例:
输入:[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] → 输出:[10, 11, 20, 12, 13, 14, 15, 16, 17, 18, 19]
def sort_by_digit_sum(num_list):
    def digit_sum(num):
        return sum(int(char) for char in str(abs(num)))
    return sorted(num_list, key=digit_sum)

if __name__ == "__main__":
    print(sort_by_digit_sum([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]))
知识点:自定义排序函数;各位数字求和;sorted的key参数。
第38题 三元组和为0判断

题目描述:判断三元组列表中,每组三个数字之和是否为0,返回布尔值列表。

测试用例:
输入:[[1, 2, -3], [-4, 0, 4], [0, 1, -5]] → 输出:[True, True, False]
def check_zero_sum_triples(triple_list):
    return [sum(triple) == 0 for triple in triple_list]

if __name__ == "__main__":
    print(check_zero_sum_triples([[1, 2, -3], [-4, 0, 4], [0, 1, -5], [1, 1, 1]]))
知识点:sum()对列表求和;列表推导式批量判断。
第39题 英文数字单词排序

题目描述:接收英文数字单词组成的字符串,按数值大小对单词升序排序。

测试用例:
输入:"six one four one two three" → 输出:"one two three four six"
def sort_number_words(input_str):
    num_map = {
        "zero": 0, "one": 1, "two": 2, "three": 3, "four": 4,
        "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9
    }
    words = input_str.split()
    sorted_words = sorted(words, key=lambda w: num_map.get(w, 0))
    return " ".join(sorted_words)

if __name__ == "__main__":
    print(sort_number_words("six one four one two three"))
知识点:字典做映射表;sorted按字典值排序;字符串拆分与拼接。
第40题 第一个破坏递增的下标

题目描述:找出列表中第一个破坏递增顺序的两个元素的下标;严格递增则返回空列表。

测试用例:
输入:[1, 2, 3, 0, 4, 5, 6] → 输出:[2, 3]
输入:[1, 2, 3, 4, 5, 6] → 输出:[]
def first_non_increasing_indices(num_list):
    for i in range(1, len(num_list)):
        if num_list[i] < num_list[i-1]:
            return [i-1, i]
    return []

if __name__ == "__main__":
    print(first_non_increasing_indices([1, 2, 3, 0, 4, 5, 6]))
    print(first_non_increasing_indices([1, 2, 3, 4, 5, 6]))
知识点:遍历查找第一个满足条件项;提前返回优化。
第41题 斐波那契数列生成

题目描述:生成前n项斐波那契数列。

测试用例:
输入:10 → 输出:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
def fibonacci_sequence(n):
    if n <= 0:
        return []
    fib = [1, 1]
    if n == 1:
        return [1]
    for i in range(2, n):
        fib.append(fib[i-1] + fib[i-2])
    return fib

if __name__ == "__main__":
    print(fibonacci_sequence(10))
知识点:经典递推算法;列表append追加元素;边界条件处理。
第42题 大小写翻转或字符串反转

题目描述:字符串仅含字母则翻转大小写;不含字母则反转整个字符串。

测试用例:
输入:['cat', '124259239185125', '!@#'] → 输出:['CAT', '521581932952421', '#@!']
def swap_case_or_reverse(str_list):
    result = []
    for s in str_list:
        if s.isalpha():
            result.append(s.swapcase())
        else:
            result.append(s[::-1])
    return result

if __name__ == "__main__":
    print(swap_case_or_reverse(['cat', '124259239185125', '!@#']))
知识点:isalpha()判断全字母;swapcase()翻转大小写;切片反转字符串。
模块3:集合运算与去重应用
第43题 集合交并差基础运算

题目描述:定义两个数字集合,分别计算交集、并集、A-B差集并输出。

测试用例:
A={1,2,3,4,5}, B={4,5,6,7} → 交集{4,5}、并集{1,2,3,4,5,6,7}、差集{1,2,3}
set_a = {1,2,3,4,5}
set_b = {4,5,6,7}
print("交集:", set_a & set_b)
print("并集:", set_a | set_b)
print("A-B差集:", set_a - set_b)
知识点:集合三大运算符:&交集、|并集、-差集。
第44题 两列表共同元素排序

题目描述:接收两个整数列表,找出共同元素,去重后升序输出。

测试用例:
列表A=[1,2,5,5],列表B=[4,5,2] → 输出:[2, 5]
def same_elements(list1, list2):
    common = set(list1) & set(list2)
    return sorted(list(common))

if __name__ == "__main__":
    print(same_elements([1,2,5,5], [4,5,2]))
知识点:集合交集找共同元素;类型转换;sorted排序。
第45题 质数相邻数字去重排序

题目描述:找出列表中与质数相邻的所有数字,去重后按升序返回。

测试用例:
输入:[2, 17, 16, 0, 6, 4, 5] → 输出:[2, 4, 16, 17]
def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    return True

def adjacent_to_prime(num_list):
    result = set()
    for idx, num in enumerate(num_list):
        if is_prime(num):
            if idx > 0:
                result.add(num_list[idx-1])
            if idx < len(num_list) - 1:
                result.add(num_list[idx+1])
    return sorted(list(result))

if __name__ == "__main__":
    print(adjacent_to_prime([2, 17, 16, 0, 6, 4, 5]))
知识点:质数判断函数;集合自动去重;相邻元素访问。
模块4:字典统计与映射应用
第46题 字典统计元素频次

题目描述:遍历列表,用字典统计每个元素出现的次数。

测试用例:
输入:[1,2,2,3,3,3] → 输出:{1:1, 2:2, 3:3}
def count_frequency(lst):
    cnt = {}
    for n in lst:
        if n in cnt:
            cnt[n] += 1
        else:
            cnt[n] = 1
    return cnt

if __name__ == "__main__":
    print(count_frequency([1,2,2,3,3,3]))
知识点:字典动态赋值;键存在性判断;统计计数经典写法。
第47题 按辅音个数筛选单词

题目描述:找出句子中包含指定个数辅音字母的所有单词。

测试用例:
句子"this is our time",辅音个数3 → 输出:['this']
def find_word_with_consonant_count(input_str, consonant_num):
    vowels = {"a", "e", "i", "o", "u"}
    words = input_str.split()
    result = []
    for word in words:
        count = 0
        for char in word.lower():
            if char.isalpha() and char not in vowels:
                count += 1
        if count == consonant_num:
            result.append(word)
    return result

if __name__ == "__main__":
    print(find_word_with_consonant_count("this is our time", 3))
知识点:集合快速判断元音;单词拆分;计数统计。
第48题 字符计数转空格字符串

题目描述:根据字典中字符和出现次数,生成空格分隔的字符串。

测试用例:
输入:{'f': 1, 'o': 2} → 输出:"f o o"
def char_count_to_string(count_dict):
    char_list = []
    for char, count in count_dict.items():
        char_list.extend([char] * count)
    return " ".join(char_list)

if __name__ == "__main__":
    print(char_count_to_string({'f': 1, 'o': 2}))
知识点:字典items遍历;列表extend扩展元素;join拼接。
第49题 大小写翻转+元音ASCII偏移

题目描述:先翻转所有字母大小写,再将元音字母替换为ASCII码+2的字符。

测试用例:
输入:"Python" → 输出:"pYTHQN"
def flip_case_shift_vowel(input_str):
    vowels = {"a", "e", "i", "o", "u", "A", "E", "I", "O", "U"}
    swapped_str = input_str.swapcase()
    result = []
    for char in swapped_str:
        if char in vowels:
            result.append(chr(ord(char) + 2))
        else:
            result.append(char)
    return "".join(result)

if __name__ == "__main__":
    print(flip_case_shift_vowel("Python"))
知识点:swapcase()翻转大小写;ord()/chr()ASCII码转换;集合成员判断。
模块5:数字与逻辑综合
第50题 最大真因数

题目描述:找出数字n的小于n的最大整数因数。

测试用例:
输入:18 → 输出:9
输入:100 → 输出:50
def largest_proper_divisor(n):
    if n <= 1:
        return 0
    for i in range(n // 2, 0, -1):
        if n % i == 0:
            return i
    return 1

if __name__ == "__main__":
    print(largest_proper_divisor(18))
    print(largest_proper_divisor(100))
知识点:倒序遍历优化;取余判断整除;因数概念。
第51题 奇数位数字乘积

题目描述:计算数字中所有奇数位数字的乘积;没有奇数位数字返回0。

测试用例:
输入:123456789 → 输出:945
输入:2468 → 输出:0
def product_of_odd_digits(num):
    num_str = str(abs(num))
    product = 1
    has_odd = False
    for char in num_str:
        digit = int(char)
        if digit % 2 == 1:
            product *= digit
            has_odd = True
    return product if has_odd else 0

if __name__ == "__main__":
    print(product_of_odd_digits(123456789))
    print(product_of_odd_digits(2468))
知识点:数字逐位处理;奇偶判断;标记变量记录是否存在。
第52题 前k个两位数之和

题目描述:计算列表前k个元素中,位数大于等于2的数字之和。

测试用例:
列表[4, 5, 17, 9, 14, 108, -9, 12, 76],k=6 → 输出:108
def sum_two_digit_in_first_k(num_list, k):
    check_part = num_list[:k]
    total = 0
    for num in check_part:
        if abs(num) >= 10:
            total += num
    return total

if __name__ == "__main__":
    print(sum_two_digit_in_first_k([4, 5, 17, 9, 14, 108, -9, 12, 76], 6))
知识点:列表切片截取;abs()判断位数;累加求和。
第53题 找整数指数

题目描述:找出整数指数x,使得a的x次方等于n。

测试用例:
a=2,n=1024 → 输出:10
def find_integer_exponent(a, n):
    if a == 1:
        return 1 if n == 1 else None
    exponent = 0
    current = 1
    while current < n:
        current *= a
        exponent += 1
    return exponent if current == n else None

if __name__ == "__main__":
    print(find_integer_exponent(2, 1024))
知识点:while循环递推;边界条件判断;幂运算逻辑。
第54题 带符号绝对值和

题目描述:计算数组所有元素绝对值的和,结果符号与数组元素乘积的符号一致。

测试用例:
输入:[1, 3, -2] → 输出:-6
def signed_abs_sum(num_list):
    abs_total = sum(abs(num) for num in num_list)
    sign = 1
    for num in num_list:
        if num < 0:
            sign *= -1
        elif num == 0:
            sign = 0
            break
    return abs_total * sign

if __name__ == "__main__":
    print(signed_abs_sum([1, 3, -2]))
知识点:生成器表达式求和;符号累乘逻辑;break提前终止循环。
第55题 范围内最大偶数

题目描述:找出两个数之间(包含两端)的最大偶数。

测试用例:
m=12,n=51 → 输出:50
def max_even_in_range(m, n):
    start, end = sorted([m, n])
    for num in range(end, start - 1, -1):
        if num % 2 == 0:
            return num
    return None

if __name__ == "__main__":
    print(max_even_in_range(12, 51))
知识点:倒序遍历找第一个满足条件项;sorted统一区间顺序。
第56题 文件名合法性校验

题目描述:校验文件名:必须以指定后缀结尾,文件名最多3个数字,最多一个句点。

测试用例:
输入:['abc.txt', 'windows.dll', 'test.py', 'win32.exe'] → 输出:['Yes', 'Yes', 'No', 'Yes']
def validate_filenames(filename_list):
    valid_suffix = {"txt", "exe", "jpg", "png", "dll"}
    result = []
    for filename in filename_list:
        if filename.count(".") != 1:
            result.append("No")
            continue
        main_name, suffix = filename.split(".")
        if suffix not in valid_suffix:
            result.append("No")
            continue
        digit_count = sum(1 for char in main_name if char.isdigit())
        if digit_count > 3:
            result.append("No")
            continue
        result.append("Yes")
    return result

if __name__ == "__main__":
    print(validate_filenames(['abc.txt', 'windows.dll', 'tiger.png', 'rose.jpg', 'test.py', 'win32.exe']))
知识点:集合判断后缀;isdigit()统计数字;多条件逐层校验。
第57题 数字循环左移

题目描述:将数字的十进制位向左循环移动n位,超出的数字补到末尾。

测试用例:
n=12345,shift=2 → 输出:34512
def circular_left_shift(num, shift):
    num_str = str(num)
    digit_len = len(num_str)
    if shift > digit_len:
        return int(num_str[::-1])
    shifted_str = num_str[shift:] + num_str[:shift]
    return int(shifted_str)

if __name__ == "__main__":
    print(circular_left_shift(12345, 2))
知识点:字符串切片拼接;循环移位逻辑;类型转换。
第58题 最接近元素对下标

题目描述:找出列表中数值最接近的一对元素的下标索引。

测试用例:
输入:[1, 7, 9, 2, 10] → 输出:[0, 3]
def closest_pair_indices(num_list):
    min_diff = float("inf")
    min_pair = []
    for i in range(len(num_list)):
        for j in range(i+1, len(num_list)):
            diff = abs(num_list[i] - num_list[j])
            if diff < min_diff:
                min_diff = diff
                min_pair = [i, j]
    return min_pair

if __name__ == "__main__":
    print(closest_pair_indices([1, 7, 9, 2, 10]))
知识点:双层循环两两比较;无穷大初始值;打擂台法找最小值。
第59题 单词内字符排序

题目描述:句子按单词拆分,每个单词内部字符按ASCII升序重排,再拼接成新字符串。

测试用例:
输入:"maltos won" → 输出:"almost now"
def sort_char_by_ascii(input_str):
    words = input_str.split()
    sorted_words = []
    for word in words:
        sorted_char = sorted(word)
        sorted_words.append("".join(sorted_char))
    return " ".join(sorted_words)

if __name__ == "__main__":
    print(sort_char_by_ascii("maltos won"))
知识点:sorted()对字符串排序;join拼接字符;字符串拆分与合并。
第60题 首次负余额计算

题目描述:多组存取款记录,计算每组首次出现负余额时的余额;全程无负余额返回None。

测试用例:
输入:[[12, -7, 3, -89, 14], [-1, 2, 7]] → 输出:[-81, -1]
def first_negative_balance(record_groups):
    result = []
    for records in record_groups:
        balance = 0
        negative_balance = None
        for num in records:
            balance += num
            if balance < 0 and negative_balance is None:
                negative_balance = balance
        result.append(negative_balance)
    return result

if __name__ == "__main__":
    print(first_negative_balance([[12, -7, 3, -89, 14, 88, -78], [-1, 2, 7]]))
知识点:嵌套列表遍历;累加器;标记变量记录首次状态。
第61题 相邻元素间插入分隔符

题目描述:在数字列表每对相邻元素之间插入指定分隔数字,返回新列表。

测试用例:
列表[12, -7, 3, -89],分隔符6 → 输出:[12, 6, -7, 6, 3, 6, -89]
def insert_separator_between(num_list, separator):
    result = []
    for i in range(len(num_list)):
        result.append(num_list[i])
        if i != len(num_list) - 1:
            result.append(separator)
    return result

if __name__ == "__main__":
    print(insert_separator_between([12, -7, 3, -89], 6))
知识点:按索引遍历;判断是否为最后一个元素;列表拼接。
第62题 辅元辅结构子串查找

题目描述:找出字符串中第一个「辅音+元音+辅音」结构的子串。

测试用例:
输入:"Hello" → 输出:"Hel"
def find_cvc_substring(input_str):
    vowels = {"a", "e", "i", "o", "u"}
    for i in range(len(input_str) - 2):
        c1 = input_str[i].lower()
        c2 = input_str[i+1].lower()
        c3 = input_str[i+2].lower()
        if c1 not in vowels and c2 in vowels and c3 not in vowels:
            return input_str[i:i+3]
    return ""

if __name__ == "__main__":
    print(find_cvc_substring("Hello"))
知识点:滑动窗口遍历;集合元音判断;子串切片。
第63题 首尾和决定排序方式

题目描述:首元素+尾元素和为奇数则升序,和为偶数则降序。

测试用例:
输入:[3, 7, 4] → 输出:[3, 4, 7]
输入:[2, 7, 4] → 输出:[7, 4, 2]
def reorder_by_edge_sum(num_list):
    if not num_list:
        return []
    edge_sum = num_list[0] + num_list[-1]
    if edge_sum % 2 == 1:
        return sorted(num_list)
    else:
        return sorted(num_list, reverse=True)

if __name__ == "__main__":
    print(reorder_by_edge_sum([3, 7, 4]))
    print(reorder_by_edge_sum([2, 7, 4]))
知识点:首尾元素访问;条件决定排序方式;sorted升降序。
第64题 GPA转等级

题目描述:按照GPA区间规则,将分数转换为对应的字母等级。

测试用例:
输入:[4.0, 3.5, 3.8] → 输出:['A+', 'A-', 'A']
def gpa_to_grade(gpa_list):
    grade_rules = [
        (4.0, "A+"), (3.7, "A"), (3.4, "A-"),
        (3.0, "B+"), (2.7, "B"), (2.4, "B-"),
        (2.0, "C+"), (1.7, "C"), (1.4, "C-"),
        (0, "F")
    ]
    result = []
    for gpa in gpa_list:
        for threshold, grade in grade_rules:
            if gpa >= threshold:
                result.append(grade)
                break
    return result

if __name__ == "__main__":
    print(gpa_to_grade([4.0, 3.5, 3.8]))
知识点:列表存规则表;多层循环break;区间判断从高到低匹配。
第65题 最大负数与最小正数

题目描述:找出列表中最大的负数和最小的正数;不存在则对应返回0。

测试用例:
输入:[-12, -6, 300, -40, 2] → 输出:[-6, 2]
def max_neg_min_pos(num_list):
    negatives = [num for num in num_list if num < 0]
    positives = [num for num in num_list if num > 0]
    max_negative = max(negatives) if negatives else 0
    min_positive = min(positives) if positives else 0
    return [max_negative, min_positive]

if __name__ == "__main__":
    print(max_neg_min_pos([-12, -6, 300, -40, 2, 2, 3]))
知识点:列表推导式分类筛选;max/min函数;空列表判断。

第三部分 综合级 · 多结构混合应用

第66题 学生成绩统计(列表+字典)

题目描述:输入姓名成绩字符串列表,用字典统计每位学生的总分和平均分并输出。

测试用例:
输入:["张三:85","李四:92","张三:90","李四:88","王五:78"]
输出:张三 总分175 平均分87.5;李四 总分180 平均分90.0;王五 总分78 平均分78.0
def score_statistics(score_list):
    data = {}
    for item in score_list:
        name, s = item.split(":")
        score = int(s)
        if name in data:
            data[name][0] += score
            data[name][1] += 1
        else:
            data[name] = [score, 1]
    for name, (total, num) in data.items():
        avg = total / num
        print(f"{name} 总分:{total},平均分:{avg:.1f}")

if __name__ == "__main__":
    score_statistics(["张三:85","李四:92","张三:90","李四:88","王五:78"])
知识点:字典嵌套列表存储多值;字符串split拆分;成绩管理典型实训场景。
第67题 购物车管理(字典+集合+列表)

题目描述:实现简易购物车:添加商品、删除商品、统计总价,用集合保证商品编号唯一。

测试用例:
添加(001,笔记本,50,2)、(002,钢笔,5,10) → 总价150
删除002 → 总价100
def shopping_cart_demo():
    cart = {}
    id_set = set()

    def add_goods(goods_id, name, price, num):
        if goods_id in id_set:
            cart[goods_id][2] += num
        else:
            cart[goods_id] = [name, price, num]
            id_set.add(goods_id)

    def del_goods(goods_id):
        if goods_id in id_set:
            del cart[goods_id]
            id_set.remove(goods_id)

    def calc_total():
        total = 0
        for info in cart.values():
            total += info[1] * info[2]
        return total

    # 测试流程
    add_goods("001", "笔记本", 50, 2)
    add_goods("002", "钢笔", 5, 10)
    print("总价:", calc_total())
    del_goods("002")
    print("删除后总价:", calc_total())

if __name__ == "__main__":
    shopping_cart_demo()
知识点:四大容器综合应用;函数封装功能;业务逻辑实现。
第68题 质数长度单词拼接

题目描述:从句子中筛选出长度为质数的单词,拼接成新字符串。

测试用例:
输入:"The quick brown fox jumps over the lazy dog." → 输出:"The quick brown fox jumps the"
def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    return True

def concat_prime_length_words(sentence):
    words = sentence.split()
    result = []
    for word in words:
        if is_prime(len(word)):
            result.append(word)
    return " ".join(result)

if __name__ == "__main__":
    print(concat_prime_length_words("The quick brown fox jumps over the lazy dog."))
知识点:质数判断函数;字符串长度;列表筛选与拼接。
第69题 交替排序算法

题目描述:将列表升序后,按「最小→剩余最大→剩余最小→剩余最大」交替生成新列表。

测试用例:
输入:[1, 3, 4, 5, 11] → 输出:[1, 11, 3, 5, 4]
def min_max_alternate_sort(num_list):
    sorted_list = sorted(num_list)
    left = 0
    right = len(sorted_list) - 1
    result = []
    pick_min = True
    while left <= right:
        if pick_min:
            result.append(sorted_list[left])
            left += 1
        else:
            result.append(sorted_list[right])
            right -= 1
        pick_min = not pick_min
    return result

if __name__ == "__main__":
    print(min_max_alternate_sort([1, 3, 4, 5, 11]))
知识点:双指针算法;排序+交替选取;布尔值切换逻辑。
第70题 最大质数下标与各位和

题目描述:找出列表中最大的质数,返回它的下标索引和各位数字之和。

测试用例:
输入:[3, 11, 7, 17, 19, 4] → 输出:[4, 10]
def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    return True

def max_prime_index_and_digit_sum(num_list):
    prime_list = []
    for idx, num in enumerate(num_list):
        if is_prime(num):
            prime_list.append((num, idx))
    if not prime_list:
        return None
    max_prime, max_idx = max(prime_list, key=lambda x: x[0])
    digit_sum = sum(int(char) for char in str(max_prime))
    return [max_idx, digit_sum]

if __name__ == "__main__":
    print(max_prime_index_and_digit_sum([3, 11, 7, 17, 19, 4]))
知识点:质数判断;元组存数值与下标;max+key找最大值;各位数字求和。
第71题 最接近的不同数字对

题目描述:找出列表中两个数值最接近的不同数字。

测试用例:
输入:[12.02, 20.3, 15.0, 19.0, 14.99] → 输出:[14.99, 15.0]
def closest_distinct_pair(num_list):
    unique_nums = list(set(num_list))
    if len(unique_nums) < 2:
        return []
    unique_nums.sort()
    min_diff = float("inf")
    min_pair = []
    for i in range(1, len(unique_nums)):
        diff = unique_nums[i] - unique_nums[i-1]
        if diff < min_diff:
            min_diff = diff
            min_pair = [unique_nums[i-1], unique_nums[i]]
    return min_pair

if __name__ == "__main__":
    print(closest_distinct_pair([12.02, 20.3, 15.0, 19.0, 11.0, 14.99, 17.0]))
知识点:集合去重;排序后相邻比较优化;浮点数比较。
第72题 偶下标排序奇下标不动

题目描述:对列表排序:奇数下标位置元素不动,偶数下标位置元素升序排序。

测试用例:
输入:[2, 5, 6, 3, 1, 4, 34] → 输出:[1, 5, 2, 3, 6, 4, 34]
def sort_keep_odd_fixed(num_list):
    even_indices = [i for i in range(0, len(num_list), 2)]
    even_values = [num_list[i] for i in even_indices]
    even_values_sorted = sorted(even_values)
    new_list = num_list.copy()
    for idx, pos in enumerate(even_indices):
        new_list[pos] = even_values_sorted[idx]
    return new_list

if __name__ == "__main__":
    print(sort_keep_odd_fixed([2, 5, 6, 3, 1, 4, 34]))
知识点:步长切片提取元素;排序后回填;列表copy复制。
第73题 提取元音(含末尾y)

题目描述:提取单词中的元音字母;如果y出现在单词末尾,也视为元音。

测试用例:
输入:['ably', 'abruptly', 'abecedary'] → 输出:['ay', 'auy', 'aeeay']
def extract_vowel_include_y_end(word_list):
    vowels = {"a", "e", "i", "o", "u"}
    result = []
    for word in word_list:
        word_lower = word.lower()
        vowel_chars = []
        for idx, char in enumerate(word_lower):
            if char in vowels:
                vowel_chars.append(char)
            elif char == "y" and idx == len(word_lower) - 1:
                vowel_chars.append(char)
        result.append("".join(vowel_chars))
    return result

if __name__ == "__main__":
    print(extract_vowel_include_y_end(['ably', 'abruptly', 'abecedary']))
知识点:集合元音判断;下标判断末尾位置;字符串拼接。
第74题 生成指定长度回文

题目描述:用输入字符串生成一个指定长度的回文字符串。

测试用例:
字符串"madam",长度7 → 输出:"madaadam"
def generate_palindrome_by_length(input_str, length):
    if length <= 0:
        return ""
    half_length = (length + 1) // 2
    half = input_str[:half_length].ljust(half_length, input_str[0])
    if length % 2 == 0:
        return half + half[::-1]
    else:
        return half + half[:-1][::-1]

if __name__ == "__main__":
    print(generate_palindrome_by_length("madam", 7))
知识点:回文生成逻辑;字符串切片反转;ljust补齐长度。
第75题 个位数字转英文降序

题目描述:提取列表中数字的个位数字,去重降序后转换为对应的英文数字单词。

测试用例:
输入:[1, 3, 4, 5, 11] → 输出:['five', 'four', 'three', 'one']
def single_digit_to_english_reverse(num_list):
    digit_word_map = {
        0: "zero", 1: "one", 2: "two", 3: "three", 4: "four",
        5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine"
    }
    unit_digits = list(set(abs(num) % 10 for num in num_list))
    unit_digits_sorted = sorted(unit_digits, reverse=True)
    return [digit_word_map[d] for d in unit_digits_sorted if d != 0]

if __name__ == "__main__":
    print(single_digit_to_english_reverse([1, 3, 4, 5, 11]))
知识点:个位提取;集合去重;降序排序;字典映射转换。
第76题 全奇数位数字筛选

题目描述:从列表中筛选出所有数字位均为奇数的数字,升序排序后返回。

测试用例:
输入:[1, 3, 79, 10, 4, 2, 39] → 输出:[1, 3, 39, 79]
def all_odd_digit_sublist(num_list):
    def is_all_odd_digit(num):
        num_str = str(abs(num))
        for char in num_str:
            if int(char) % 2 == 0:
                return False
        return True
    result = [num for num in num_list if is_all_odd_digit(num)]
    return sorted(result)

if __name__ == "__main__":
    print(all_odd_digit_sublist([1, 3, 79, 10, 4, 2, 39]))
知识点:自定义判断函数;列表推导式筛选;sorted排序。
第77题 快乐字符串判断

题目描述:判断字符串是否每三个连续字符都不相同;不是则返回首次连续三个相同字符的后两个下标。

测试用例:
输入:"Python" → 输出:None
输入:"Unhappy" → 输出:[4, 5]
def unhappy_string_indices(input_str):
    for i in range(len(input_str) - 2):
        if input_str[i] == input_str[i+1] == input_str[i+2]:
            return [i+1, i+2]
    return None

if __name__ == "__main__":
    print(unhappy_string_indices("Python"))
    print(unhappy_string_indices("Unhappy"))
知识点:连续多元素比较;下标计算;None空值返回。
第78题 严格递增序列生成

题目描述:用原列表元素生成一个严格递增的序列(去重+升序)。

测试用例:
输入:[1, 3, 79, 10, 4, 2, 39] → 输出:[1, 2, 3, 4, 10, 39, 79]
def increasing_sequence_from_list(num_list):
    return sorted(list(set(num_list)))

if __name__ == "__main__":
    print(increasing_sequence_from_list([1, 3, 79, 10, 4, 2, 39]))
知识点:set去重+sorted排序;严格递增的实现方式。
第79题 n位以2开头结尾的数字

题目描述:找出所有n位整数中,以2开头或以2结尾的数字。

测试用例:
输入:2 → 输出:[12, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 42, 52, 62, 72, 82, 92]
def n_digit_start_end_with_two(n):
    if n == 1:
        return [2]
    start = 10 ** (n - 1)
    end = 10 ** n - 1
    result = []
    for num in range(start, end + 1):
        num_str = str(num)
        if num_str[0] == "2" or num_str[-1] == "2":
            result.append(num)
    return result

if __name__ == "__main__":
    print(n_digit_start_end_with_two(2))
知识点:幂运算生成区间;字符串取首尾字符;或逻辑判断。
第80题 最接近回文字符串

题目描述:根据输入字符串生成最接近的回文字符串。

测试用例:
输入:"madan" → 输出:"madam"
def closest_palindrome(input_str):
    n = len(input_str)
    if n == 1:
        return input_str
    half = input_str[:(n + 1) // 2]
    if n % 2 == 0:
        palindrome = half + half[::-1]
    else:
        palindrome = half + half[:-1][::-1]
    return palindrome

if __name__ == "__main__":
    print(closest_palindrome("madan"))
知识点:回文生成原理;字符串切片反转;奇偶长度处理。
第81题 区间平均值转二进制

题目描述:计算a到b之间所有整数的平均值,四舍五入后以二进制格式返回。

测试用例:
a=4,b=7 → 输出:0b101
def range_average_binary(a, b):
    if b <= a:
        return -1
    num_range = range(a, b)
    average = sum(num_range) / len(num_range)
    rounded_avg = round(average)
    return bin(rounded_avg)

if __name__ == "__main__":
    print(range_average_binary(4, 7))
知识点:range区间求和;平均值计算;round四舍五入;bin二进制转换。
第82题 向上取整平方累加

题目描述:列表中每个浮点数向上取整,计算取整后整数的平方,返回累加和列表。

测试用例:
输入:[2.6, 3.5, 6.7, 2.3, 5.6] → 输出:[9, 25, 74, 83, 119]
import math
def ceil_square_running_total(num_list):
    running_total = 0
    result = []
    for num in num_list:
        ceil_num = math.ceil(num)
        running_total += ceil_num ** 2
        result.append(running_total)
    return result

if __name__ == "__main__":
    print(ceil_square_running_total([2.6, 3.5, 6.7, 2.3, 5.6]))
知识点:math.ceil向上取整;幂运算;滚动累加列表。
第83题 四个正偶数求和

题目描述:找出四个正偶数,使其和等于给定整数n。

测试用例:
输入:100 → 输出:[94, 2, 2, 2]
def four_even_sum(n):
    if n < 8:
        return []
    return [n - 6, 2, 2, 2]

if __name__ == "__main__":
    print(four_even_sum(100))
知识点:数学逻辑简化;边界条件判断;最小正偶数取值。

附录:四大容器核心知识点汇总表

容器类型 表示符号 核心特性 是否可变 是否有序 高频核心方法
列表 list [ ] 元素可重复、支持索引 可变 有序 append、count、sort、pop、切片、推导式
元组 tuple ( ) 元素可重复、支持索引 不可变 有序 index、count、enumerate遍历
集合 set { } 元素唯一、自动去重、无索引 可变 无序 &交集、|并集、-差集、add、去重
字典 dict {键:值} 键唯一、键值对存储 可变 3.7+有序 items、keys、values、get、统计计数

本习题集适用于中职计算机专业Python课程教学,可根据教学进度分阶段使用。