繁体   English   中英

将带有 if 条件的 for 循环转换为列表理解

[英]Conversion of for-loop with an if-condition into list comprehension

是否可以在给定代码中将带有 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 循环转换为列表理解? 如果是,最好的方法是什么?

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

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

使用enumerate来获取索引和值。 此外,您可以使用 else 设置默认值

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

不,我不相信您可以将其表达为列表理解(至少,不会使理解/调试变得更糟)。

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

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

您的 output 是f(x)返回值的列表,它不能依赖于传入的x的早期值,除非f保持全局 state (这很严重;不要这样做)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM