微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将带有 if 条件的 for 循环转换为列表推导式

如何解决将带有 if 条件的 for 循环转换为列表推导式

是否可以将给定代码中带有 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() 函数。基本形式为:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?