一段Python代码中的算法错误我不能做我必须做的事情

2024-07-02 12:10:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据列表:

[18.0,18.0,28.35,81.26,1.99,1.3,1.4,1.4,1.4,1.4,14.8,1.78,5.79,21.18,2.54,3.0,1.69,8.11,1.57,1.31,11.19,8.14,1.42,4.72]

我想当其中两个数字的值小于2时,第三个数字存储在另一个列表中。例如,如果前两个数字小于2;第三个数字进入列表,当第三个和第四个数字小于2时,第五个数字也在列表中。 但问题是,如果几个连续系数小于2,程序将难以识别正确的系数。 我的代码是:

for listItrator in listOfCoefficients_float:
    if listItrator < lowCoefficientsCounter: #lowCoefficientsCounter: Is equal to 2 as assumed
        wait = wait + 1
        if wait == wait2: #wait2: This variable is entered by the user, which according to the pattern described at the beginning of the problem, is equal to 2 here
            trimmedCofficientsFiller = listOfCoefficients_float.index(listItrator)
            finalOutputCofficients_float.append(float(listOfCoefficients_float[trimmedCofficientsFiller + 1])) #Save the next coefficient in the list
            wait = 0
    elif listItrator >= lowCoefficientsCounter:
        wait = 0

输出列表为: [1.4,1.4,1.4,1.19]

而我期望的输出是: [1.4,1.4,14.8,11.19]


Tags: thetoin列表ifis数字equal
2条回答

在这样的问题中,正如您也注意到的,必须格外小心,以免弄乱您的比较以及您正在处理的索引。工作解决方案如下所示:

res = []
for i, (x,y) in enumerate(zip(lst[::2], lst[1::2])):
    if x < 2.0 and y < 2.0:
        res.append(lst[2+2*i])
print(res)  # [1.4, 1.4, 14.8, 11.19]

如果您想保存一些字节,它也会出现在列表理解中:

res = [lst[2*i] for i, (x,y) in enumerate(zip(lst[::2], lst[1::2]), 1) if max(x,y)<2.0]

在这两种情况下,lst是您的原始列表

我很有信心你能理解,但如果不能,请让我知道,我会补充一些进一步的解释

请注意,正如@MisterMiyagi所说,您可以从zip中挤出一些额外的能量,而不是自己enumerat计算索引,如下所示:

res = [z for (x,y,z) in zip(lst[::2], lst[1::2], lst[2::2]) if max(x,y)<2.0]

在线

            trimmedCofficientsFiller = listOfCoefficients_float.index(listItrator)

您正在查找满足索引的第一个数字,而不是第二个、第三个等实例1.4显示多次,因此您的程序总是选择第一个1.4实例。考虑用索引迭代列表,而不是(例如{{CD3>})

相关问题 更多 >