我有一个元组列表:
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/