27、尝试使用生成器函数。从需要多个值的基本迭代器开始(数学序列是典型示例;这里不以斐波那契数列为例)。再试试更高级的生成器,比如接收多个输入列表,然后以某种方式生成合并后的值。另外,编写一个简单的生成器来显示两个文件中相同的行。
以下是实现上述需求的 Python 代码示例。
首先是生成数学序列的基本迭代器,这里以等差数列为例:
# 等差数列生成器
def arithmetic_sequence(start, step):
num = start
while True:
yield num
num += step
接着是从多个输入列表中合并值的高级生成器:
# 合并多个列表的生成器
def merge_lists(*lists):
for lst in lists:
for item in lst:
yield item
最后是用于显示两个文件中相同行的生成器:
# 显示两个文件中相同行的生成器
def identical_lines(file1_path, file2_path):
with open(file1_path, 'r') as file1, open(file2_path, 'r') as file2:
lines1 = set(file1.readlines())
for line in file2:
if line in lines1:
yield line
你可以使用以下方式调用这些生成器:
# 使用等差数列生成器
a_sequence = arithmetic_sequence(1, 2)
for _ in range(5):
print(next(a_sequence))
# 使用合并列表生成器
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged = merge_lists(list1, list2)
for item in merged:
print(item)
# 使用显示相同行生成器
file1_path = 'file1.txt'
file2_path = 'file2.txt'
for line in identical_lines(file1_path, file2_path):
print(line.strip())
上述代码分别实现了基本迭代器、合并多个列表的生成器以及显示两个文件中相同行的生成器。
28、尝试抽象案例研究中使用的协程,以便 k - 最近邻算法可以用于各种数据集。你需要构建一个协程,该协程接受执行距离和重组计算的其他协程或函数作为参数,然后调用这些函数来找到实际的最近邻。
为了让 k - 最近邻算法能用于各种数据集,可构建一个协程,它接收用于距离和重组计算的其他协程或函数作为参数。在这个协程中,通过调用这些参数函数来完成距离计算和最近邻查找。
例如,对 nearest_neighbors 协程进行改造,使其能接收距离计算函数作为参数。以下是示例代码:
def nearest_neighbors(model_data, num_neighbors, distance_func):
model = list(model_data)
target = yield
while True:
distances = sorted(
((distance_func(c[0], target), c
Python生成器与设计模式实践精要

最低0.47元/天 解锁文章
2535

被折叠的 条评论
为什么被折叠?



