将带有ifcondition的forloop转换为列表理解

2024-06-02 08:27:21 发布

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

在给定的代码中,是否可以将带有if条件的for循环转换为列表

    ListIndex = 0
    timeSeries = []
    Value = defaultValue
    dfLength = len(dfCont.index)

    for i in range(dfLength):
        if abs(dfCont.iloc[i, 0] - occurance[ListIndex]) < 0.0001:
            Value = discreteValues[ListIndex]
            ListIndex = ListIndex + 1
        timeSeries.append(Value)

我尝试使用标准定义将这个for循环压缩到列表理解中,但它似乎不起作用。是否有可能首先将这个for循环转换为列表理解?如果是,最好的方法是什么


Tags: 代码in列表forindexlenifvalue
2条回答

不,我不相信您可以将其表示为一个列表理解(至少,在理解/调试时会变得非常糟糕)

关键的部分是,您正在更新某些迭代中的ValueListIndex,并且需要这些更新的值保存到未来的迭代中。列表理解并不是这样工作的,因为它们是用来替换map()函数的。基本形式是:

[f(x) for x in y if g(x)]

您的输出是一个f(x)返回值列表,它不能依赖于传入的x的早期值,除非f保持全局状态(这是总的;不要这样做)

我认为您不需要ListIndex变量,因为您可以从enumerate获取它

timeSeries = [discreteValues[idx] for idx, i in enumerate(dfLength) if abs(dfCont.iloc[i, 0] - occurance[ListIndex]) < 0.0001]

相关问题 更多 >