gpt4 book ai didi

Python 将嵌套循环转换为简单行

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:00 25 4
gpt4 key购买 nike

在 Python 2.7.x 中,我有两个列表,我想要一个返回第一个值(不是索引)的函数,如下所示

def first_incorrect_term(polynomial, terms):
for index in range(len(polynomial), len(terms)):
if evaluate(polynomial, index) != terms[index-1]:
return evaluate(polynomial, index)

让我们假设评估是一个有效的函数。我想将这三行看起来面向对象的代码替换为使用“find”或 Python 中的某些此类函数的代码。

基本上,我迭代第二个列表的索引,超出多项式中的数字项(因为我相信前 X 项将匹配),对其进行评估并与预期项进行比较。对于第一个术语不匹配的实例,我希望返回计算后的多项式。

我正在寻找使用 Python find/lambda 或类似的东西来替换这 3 行,这是因为我绝对可以看到我没有使用 Python 功能,如 link 中所述。

PS:这与 Project Euler 问题有些相关,但是我已经使用上面的代码片段解决了它,并且希望提高我的“Python”技能:)

最佳答案

首先,使用yield制作函数的生成器版本:

def incorrect_terms(polynomial, terms):
for index in range(len(polynomial), len(terms)):
eval = evaluate(polynomial,index)
if eval != terms[index-1]:
yield (polynomial, index, eval)

那么第一个结果就是第一个不匹配:

mismatches = incorrect_terms(polynomial, terms)
first_mismatch = mismatches.next()

我认为您实际上想要迭代所有项的值,而不是多项式长度之后的值,在这种情况下您可以压缩:

results = (evaluate(polynomial,index) for index in count(0))
pairsToCompare = itertools.izip(results, terms)
mismatches = (pair for pair in pairsToCompare if pair[0] != pair[1])

first_mismatch = mismatches.next()

假设evaluate(polynomial, n)正在计算给定多项式的第 n 项,并将它们与 terms 中的值进行比较.

关于Python 将嵌套循环转换为简单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com