python - 在 lambda 中执行 if

标签 python python-2.7 lambda

我有一个元组列表:

lst = [('654', '2.12', '86'), ('2', '756'), ('5', '1.77', '71'), ('1.65', '55')]

函数

num = min(lst,key=lambda x: abs(float(x[1]) - 2))

在每个元组内的位置x[1]处查找每个数字并输出x[1]最接近2的元组。是否可以调整函数,以便它仅查找具有 len == 3 的元组?

如果是这样,我想同时输出那个元组和后面的 2 项元组。例如。对于上述最终结果应该是:

[('654', '2.12', '86'), ('2', '756')] 有了这个,我认为 for 循环就足够了,所以我想我会处理的。

最佳答案

如果列表总是在 3 元组和 2 元组之间交替,您可以使用

zip(*[iter(lst)]*2)

group the items into pairs .然后你就可以像以前一样使用 min 了:

In [39]: min(zip(*[iter(lst)]*2),key=lambda (x,y): abs(float(x[1]) - 2))
Out[39]: (('654', '2.12', '86'), ('2', '756'))

关于python - 在 lambda 中执行 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407216/

相关文章:

python - 将欧元转换为欧分时有时会丢失一美分

python - 如何列出某些目录内容的最新修改时间?

c# - 如果 Lambda c# 不存在,则更新属性或创建新元素

C++ lambda自传递异常

python - 如何在 Python 中将字典键作为列表返回?

python - os.rename 无法创建已存在的文件

Python 配置解析器

python - 将行添加到 TensorFlow 张量批处理

python - 如何将存储为字符串的元组转换回元组再转换为字符串?

node.js - Bluebird 与 Lambda 不返回数据