使用python3时Lambda函数错误

辛格

我有一段代码可在Python 2.7中工作,但不能在Python3.7中工作。在这里,我试图按lambda函数的值进行排序。

def get_nearest_available_slot(self):
    """Method to find nearest availability slot in parking
    """
    available_slots = filter(lambda x: x.availability, self.slots.values())
    if not available_slots:
        return None
    return sorted(available_slots, key=lambda x: x.slotNum)[0]

我得到的错误是:

File "/home/xyz/Desktop/parking-lot/parking-lot-1.4.2/parking_lot/bin/source/parking.py", line 45, in get_nearest_available_slot
    return sorted(available_slots, key=lambda x: x.slotNum)[0]
IndexError: list index out of range

我在这里做错了什么?

gmds

答案很简单:这是因为filter工作原理。

在Python 2,filter急切地评估,这意味着一旦你怎么称呼它,它返回list

filter(lambda x: x % 2 == 0, [1, 2, 3])

输出:

[2]

相反,在Python 3中,它filter惰性的它产生一个您可以迭代一次的对象,或一个迭代器

<filter at 0x110848f98>

在Python 2中,if not available_slots如果结果filter为空,该行停止执行,因为空list值为False

但是,在Python 3中,filter返回一个迭代器,True迭代器的总值,因为在不尝试获取下一个元素的情况下您无法确定迭代器是否已耗尽,并且迭代器没有长度。请参阅以获取更多信息。

因此,存在将空​​迭代器传递给并sorted产生另一个empty的情况list您不能在0位置访问元素list,因此会得到一个IndexError

为了解决这个问题,我建议严格评估条件。您可以执行以下操作,将其替换sortedmin,因为我们只需要一个值:

def get_nearest_available_slot(self):
    """Method to find nearest availability slot in parking
    """
    available_slots = [slot for slot in self.slots.values() if slot.availability]
    if available_slots:
        return min(available_slots, key=lambda x: x.slotNum)

    else:
        return None

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GridsearchCV:尝试在参数中传递lambda时,无法腌制函数错误

尝试使用Toastr时出现错误“ toastr不是函数错误”

使用Jasmine时出现未定义的函数错误

使用Lambda函数时的语法错误

将lambda函数作为参数传递时,没有匹配的函数错误

我无法传递参数错误:无法识别的参数:Argparse Python3

Python3:使用urllib时出现HTTP错误302

如何在Windows OS上使用zip文件编写AWS Python3 Lambda函数

AWS Lambda函数错误-无法导入模块“索引”:错误

使用Unicode时出现C ++ wmain函数错误

Excel VBA:使用值> 255时chr函数错误

dynamodb.transactWriteItems不是Lambda上的函数错误,但使用VS Code时不是

使用内在函数时如何避免“ out”参数错误?

std :: atomic作为类成员:使用boost / python.hpp时使用删除的函数错误

当我尝试在Python3中的函数中打印全局变量时出现错误

Python:SyntaxError'return'外部函数错误

python list.remove()函数错误

python:先验函数错误生成的参数

熊猫中的lambda函数错误

在列表中使用Lambda函数时发生Python:Syntax错误

序数错误,Python 3

Python 查找中值函数错误

神秘的 Python Pandas lambda 函数错误

python3类参数错误

使用 Python 访问 aws ecr 时的参数错误

Python变量声明和函数错误

在 lambda 中使用扩展方法时,C# 5.0 ForEach 无效参数错误

addEventListener 不是函数错误,当我使用 .split 时

使用redux-toolkit时reducer函数错误