1. Python面试问题深度解析:21-40题实战指南
作为Python开发者,面试中经常会被问到各种基础知识和实战问题。本系列文章精选了100个高频Python面试题,本文聚焦第21到40题,涵盖字符串处理、列表操作、字典应用等核心知识点。这些问题不仅能检验你的Python基础,更能考察你对语言特性的理解深度。
1.1 字符串处理实战技巧
1.1.1 字符串反转与大小写转换
字符串反转是面试中的经典问题。Python中可以通过切片操作轻松实现:
s = 'ilovechina' reversed_str = s[::-1] # 输出:'anihcevoli'大小写转换则有多种方法:
# 首字母大写 'hello world'.title() # 'Hello World' # 全转小写 'HHH'.lower() # 'hhh' # 去除首尾空格 ' adabdw '.strip() # 'adabdw'注意:strip()只能去除首尾空格,中间的空格需要用其他方法处理。比如用正则表达式:re.sub(r'\s+', ' ', '你好 中国 ')
1.1.2 字符串格式化与编码
Python中有三种主流字符串格式化方式:
# %格式化(Python2风格) 'Hello %s' % 'World' # str.format()(Python3推荐) 'Hello {}'.format('World') # f-string(Python3.6+最佳实践) name = 'World' f'Hello {name}'编码转换需要注意:
# GBK转UTF-8 s = '中文'.encode('gbk') # 先编码为GBK s.decode('gbk').encode('utf-8') # 解码后转UTF-81.2 列表操作高级技巧
1.2.1 列表去重与合并
列表去重有多种实现方式:
# 方法1:利用集合特性 lst = [1,2,3,1,2] unique_lst = list(set(lst)) # [1, 2, 3] # 方法2:保持原有顺序 from collections import OrderedDict unique_lst = list(OrderedDict.fromkeys(lst))列表合并的几种方式:
a = [1,5,7,9] b = [2,2,6,8] # 直接相加(创建新列表) c = a + b # extend方法(原地修改) a.extend(b) # 切片赋值 a[len(a):] = b1.2.2 列表展开与打乱
展开嵌套列表的优雅方式:
nested = [[1,2],[3,4],[5,6]] flat = [item for sublist in nested for item in sublist] # 输出:[1, 2, 3, 4, 5, 6]随机打乱列表:
import random lst = [1,2,3,4,5] random.shuffle(lst) # 原地打乱1.3 字典操作精髓
1.3.1 字典合并与排序
字典合并的三种方式:
a = {"A":1,"B":2} b = {"C":3,"D":4} # 方法1:update() c = {} c.update(a) c.update(b) # 方法2:dict构造函数 c = dict(a, **b) # 方法3:解包操作(Python3.5+推荐) c = {**a, **b}字典列表按值排序:
data = [ {'name':'alice', 'age':38}, {'name':'bob', 'age':18}, {'name':'Carl', 'age':28} ] sorted_data = sorted(data, key=lambda x: x['age'])1.3.2 字典生成式与元组转换
字典生成式的妙用:
# 生成平方字典 square_dict = {x: x*x for x in range(6)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}元组转字典的两种方式:
keys = ('a', 'b') values = (1, 2) # 方法1:zip转换 dict(zip(keys, values)) # 方法2:字典生成式 {k:v for k,v in zip(keys, values)}1.4 数据类型综合应用
1.4.1 可变与不可变类型
Python中核心数据类型分类:
- 不可变类型:int、float、str、tuple、frozenset
- 可变类型:list、dict、set
判断示例:
a = (1,2,3) a[0] = 4 # 报错:元组不可变 b = [1,2,3] b[0] = 4 # 正常执行1.4.2 生成器与迭代器
列表推导式转生成器:
# 列表推导式(立即计算) [x*x for x in range(10)] # 生成器表达式(惰性计算) (x*x for x in range(10))切片生成器的实现:
import itertools gen = (x for x in range(100)) sliced = itertools.islice(gen, 10, 20) # 取10-20项1.5 常见问题排查与优化
1.5.1 性能优化技巧
处理大数据集时,生成器比列表更节省内存:
# 不好的做法:一次性读取大文件 with open('huge.log') as f: lines = f.readlines() # 可能耗尽内存 # 推荐做法:使用生成器逐行处理 def read_lines(file): with open(file) as f: for line in f: yield line1.5.2 易错点警示
元组"可变性"陷阱:
a = (1,2,3,[4,5]) a[3].append(6) # 可以执行!因为修改的是列表元素 a[0] = 7 # 报错!不能修改元组直接元素深拷贝与浅拷贝区别:
import copy lst = [1,2,[3,4]] shallow = copy.copy(lst) # 只拷贝第一层 deep = copy.deepcopy(lst) # 递归拷贝所有层级掌握这些核心知识点,不仅能帮助你在Python面试中游刃有余,更能提升日常开发中的代码质量和效率。建议读者针对每个问题自己动手实践,理解背后的原理而不仅仅是记住答案。