1. Python 3.x 的 range() 函数返回一个( )

  • 答:range 对象(不可变序列、可迭代)。

2. 表达式 [3] in [1, 2, 3, 4] 的值为( )

  • 答:False

说明:右侧列表元素是整数,左侧是列表 [3],类型不同,元素不相等。

3. 列表对象的 sort() 方法用于原地排序,其返回值为( )

  • 答:None

4. 列表对象的( )方法删除首次出现的指定元素,不存在则抛出异常

  • 答:remove()

说明:若元素不存在,抛出 ValueError

5. 已知 a_list = [3,4,5,6,7,9,11,13,15,17],切片 a_list[3:7] 的值是( )

  • 答:[6, 7, 9, 11]

6. 在 Python 中,字典和集合都用一对( )作为界定符;字典的每个元素由两部分组成,即( ),其中( )不允许重复

  • 答:{}键:值

7. 使用字典对象的( )方法返回“键-值”对;( )方法返回“键”;( )方法返回“值”

  • 答:items()keys()values()

8. 已知 a=['name','age','sex']b=['Dong',38,'Male'],一条语句将其转换为字典

  • 答:dict(zip(a, b))

9. 从列表 a 中每 3 个元素取 1 个,组成新列表 b

  • 答:b = a[::3]

10. 使用列表推导式生成包含 10 个数字 5 的列表

  • 答:[5 for _ in range(10)]

11. (可以 / 不可以)使用 del 命令删除元组中的部分元素

  • 答:不可以。

说明:元组是不可变类型,不能对其部分元素做就地删除(可以 del 整个变量名)。


12. 过滤:只输出重复字符不超过一半的字符串

简要分析

  • 常见理解:字符串中任意字符的出现次数不超过字符串长度的一半(即 max_freq <= len(s)/2)。
  • 使用 collections.Counter 统计频次,按条件过滤。
1
2
3
4
5
6
7
8
9
10
11
12
13
from collections import Counter

def filter_strings(data):
def ok(s: str) -> bool:
if not s:
return True # 空串视为满足
freq = Counter(s)
return max(freq.values()) <= len(s) / 2
return [s for s in data if ok(s)]

# 示例
data = ["aab", "aaaa", "abcabc", "xyz", "aaabb"]
print(filter_strings(data)) # 输出如:['aab', 'abcabc', 'xyz']

13. 使用筛选法(埃拉托斯特尼)输出小于 1000 的所有素数

简要分析

  • 经典算法:从 2 开始,删除其倍数,依次进行到 sqrt(n);保留下来的即为素数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def primes_upto(n: int = 1000):
if n < 2:
return []
sieve = [True] * (n + 1)
sieve[0] = sieve[1] = False
import math
for p in range(2, int(math.isqrt(n)) + 1):
if sieve[p]:
step = p
start = p * p
sieve[start:n + 1:step] = [False] * len(range(start, n + 1, step))
return [i for i, is_prime in enumerate(sieve) if is_prime and i < n]

print(primes_upto(1000))

13(续)为什么尽量从列表尾部进行元素的增加与删除?

简要分析

  • 列表底层是动态数组;在头部插入/删除需要整体搬移元素,时间复杂度约 O(n)
  • 尾部的 append() / pop() 为摊还 O(1),更高效且更少内存拷贝。

14. 生成 1000 个 0~100 的随机整数,并统计出现次数

简要分析

  • random.randint 生成数据;用 collections.Counter 或字典计数
1
2
3
4
5
6
7
8
import random
from collections import Counter

nums = [random.randint(0, 100) for _ in range(1000)]
cnt = Counter(nums)

for k in sorted(cnt):
print(k, cnt[k])

15. 用户输入一个列表与两个下标,输出闭区间子列表

简要分析

  • 使用 ast.literal_eval 解析列表字符串;处理下标顺序与越界,最终切片 [start:end+1]
1
2
3
4
5
6
7
8
9
10
11
12
import ast

def sublist_by_index():
raw = input("请输入列表:")
lst = ast.literal_eval(raw)
i = int(input("请输入起始下标:"))
j = int(input("请输入结束下标:"))
start, end = sorted((i, j))
if start < 0 or end >= len(lst):
print("补兑,请再输一遍")
return
print(lst[start:end+1])

16. 设计字典:按用户输入的键输出值;不存在则提示

简要分析

  • 使用 dict.get(key, default) 可以提供默认提示;也可用 in 先判断键存在。
1
2
3
4
5
6
7
8
9
book = {
"name": "Dong",
"age": 38,
"sex": "Male",
"city": "Beijing"
}

key = input("请输入键(如 name/age/sex/city):")
print(book.get(key, "您输入的键不存在!"))

17. 生成 20 个随机数,前 10 升序、后 10 降序

简要分析

  • 对两个切片分别排序后再拼接或原地赋值
1
2
3
4
5
6
import random

lst = [random.randint(0, 100) for _ in range(20)]
lst[:10] = sorted(lst[:10])
lst[10:] = sorted(lst[10:], reverse=True)
print(lst)