Python常见面试题的详解5
1. re 模块中 search () 和 match () 的区别
- 要点:在 Python 的
re
模块中,re.match()
和re.search()
是用于正则表达式匹配的两个重要函数,它们的主要区别在于匹配的起始位置: re.match()
:从字符串的开头开始匹配正则表达式。如果字符串的开头部分不符合正则表达式的模式,re.match()
函数将返回None
。re.search()
:在整个字符串中搜索第一个符合正则表达式模式的位置,不要求从字符串的开头进行匹配。- 示例:
python
import re
text = "abc123"
result_match = re.match(r'\d+', text) # 由于字符串开头不是数字,返回 None
result_search = re.search(r'\d+', text) # 能够匹配到字符串中的 "123",返回匹配对象
print(result_match)
print(result_search)
2. 使用 re.sub () 函数进行文本字符串的查询和替换
- 要点:
re.sub()
函数是re
模块中用于字符串替换的强大工具,它可以根据指定的正则表达式模式,将字符串中匹配的部分替换为新的字符串。 - 示例:
python
import re
text = "Python is fun"
new_text = re.sub(r"fun", "awesome", text) # 将字符串中的 "fun" 替换为 "awesome"
print(new_text)
3. except 的用法和作用
- 要点:
except
语句在 Python 的异常处理机制中起着关键作用,它的主要作用是捕获try
代码块中可能出现的异常,从而防止程序因为异常而崩溃。 - 示例:
python
try:
# 这里放置可能会出现错误的代码
num = 10 / 0 # 会引发 ZeroDivisionError 异常
except ValueError as e:
# 处理特定的 ValueError 异常,这里可以添加处理逻辑
print(f"捕获到 ValueError 异常: {e}")
except Exception as e:
# 处理除了已经明确捕获的特定异常之外的所有其他异常
print(f"捕获到其他异常: {e}")
4. range () 函数的用法和作用
- 要点:
range()
函数是 Python 内置的一个用于生成整数序列的函数,它在循环中经常被使用,有以下几种调用形式: range(stop)
:生成从 0 到stop - 1
的整数序列。range(start, stop)
:生成从start
到stop - 1
的整数序列。range(start, stop, step)
:按照指定的步长step
生成从start
到stop - 1
的整数序列,步长可以为正数或负数。- 示例:
python
print(list(range(5))) # 输出 [0, 1, 2, 3, 4]
print(list(range(1, 10, 2))) # 输出 [1, 3, 5, 7, 9]
5. 处理大文件(内存限制)
- 要点:当处理大文件时,为了避免一次性将整个文件加载到内存中导致内存不足的问题,可以采用逐行读取的方式,利用生成器来实现。
- 示例:
python
def get_lines():
try:
with open("file.txt", "r", encoding="utf-8") as f: # 注意指定文件编码
for line in f:
yield line.rstrip("\r\n") # 去除换行符 \r\n
except FileNotFoundError:
print("文件不存在")
except UnicodeDecodeError:
print("文件编码错误")
except:
print("文件处理过程中出现其他错误")
# 调用生成器函数逐行处理文件
for line in get_lines():
print(line)
在处理大文件时,需要考虑以下几个问题:
- 文件编码:确保指定正确的文件编码,常见的编码有
utf-8
、gbk
等。 - 换行符处理:不同操作系统的换行符可能不同(如 Windows 系统的
\r\n
和 Linux 系统的\n
),需要进行适当处理。 - 异常处理:如文件不存在、文件损坏等情况,要进行合理的异常捕获和处理。
6. 判断日期是年份的第几天
- 要点:可以使用 Python 的
datetime
模块来判断一个日期是所在年份的第几天。 - 示例:
python
from datetime import datetime
date_str = "2025-02-15"
date = datetime.strptime(date_str, "%Y-%m-%d")
day_of_year = date.timetuple().tm_yday # 直接获取该日期在年份中的第几天
print(day_of_year)
7. 打乱有序列表
- 要点:使用
random
模块中的shuffle()
函数可以对列表进行原地打乱,即直接修改原列表的元素顺序。 - 示例:
python
import random
alist = [1, 2, 3, 4]
random.shuffle(alist) # 列表 alist 的元素顺序被打乱,例如可能变为 [3, 1, 4, 2]
print(alist)
8. 字典按值排序
- 要点:可以通过
sorted()
函数结合lambda
表达式,根据字典的值对字典进行排序。 - 示例:
python
d = {'a': 24, 'g': 52, 'i': 12, 'k': 33}
sorted_dict = dict(sorted(d.items(), key=lambda x: x[1]))
# 排序后的字典为 {'i': 12, 'a': 24, 'k': 33, 'g': 52}
print(sorted_dict)
9. 字典推导式
- 要点:字典推导式是一种简洁的创建字典的方式,它可以根据已有的数据结构快速生成字典。将列表转换为字典,列表的元素作为键,元素的索引的平方作为值。
- 示例:
python
keys = ['a', 'b', 'c']
d = {k: i ** 2 for i, k in enumerate(keys)} # 生成的字典为 {'a': 0, 'b': 1, 'c': 4}
print(d)
10. 反转字符串
- 要点:在 Python 中,可以通过切片操作来实现字符串的反转。
- 示例:
python
s = "aStr"
reversed_s = s[::-1] # 字符串 s 被反转,结果为 "rtSa"
print(reversed_s)
11. 字符串转字典
- 要点:可以将特定格式的字符串转换为字典,通常需要结合字符串的分割和字典推导式来实现。
- 示例:
python
s = "k:1 |k1:2|k2:3|k3:4"
d = {k: int(v) for item in s.split("|") for k, v in [item.split(":")]}
# 转换后的字典为 {'k': 1, 'k1': 2, 'k2': 3, 'k3': 4}
print(d)