元组,最大值和干净迭代

时间:2013-02-14 18:00:40

标签: python tuples

这更多是出于好奇而不是任何事情,因为我的工作原理。实现这个目标的“最干净”方法是什么?给定像[(Object, int), (Object1, int1), ... ]这样的对元组列表,找到最大的int并返回与该值相关联的int和对象。

我做了'简单的出路',因为:

bestObject, bestVal = None, 0
for i in range(len(tuple_list)):
    obj, val = tuple_list[i]
    if val > bestVal:
        bestObject, bestVal = obj, val
return bestObject, bestValue

可以做得更好吗?

2 个答案:

答案 0 :(得分:4)

max函数提供key参数,您可以在其中准确指定要在比较中使用的内容。例如:

In [1]: class MyObject(object):
   ...:     def __init__(self, a):
   ...:         self.a = a
   ...:         

In [2]: a = MyObject('something')

In [3]: b = MyObject('something else')

In [4]: c = MyObject('another thing??')

In [5]: tups = [(a, 1), (b, 5), (c, 2)]

In [6]: max(tups, key=lambda x: x[1])
Out[6]: (<__main__.MyObject at 0x26c17d0>, 5)

答案 1 :(得分:1)

Max将比较元组中的第一项,那么如何:

max_val, max_obj = max([(val, obj) for obj, val in tuple_list])
return max_obj, max_val