2013-02-14 2 views
1

이것은 내가 무엇을했기 때문에 무엇보다 호기심이 부족합니다. 이것을 구현하는 '가장 깨끗한'방법은 무엇입니까? 따라서 [(Object, int), (Object1, int1), ... ]과 같은 pair-tuples의 목록이 주어지면 최대 int를 찾아 해당 값과 관련된 int 및 object를 반환합니다. 튜플, 최대 값 및 클리닝 반복

내가는 그래서 '쉬운 방법을'한 :

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 

가 더 잘 할 수 있습니까?

답변

1

최대 튜플의 첫 번째 항목을 비교, 그래서 방법에 대해 : 철저에 대한

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

그게 내가 찾고 있던거야. 좋은 생각. 나는 여전히 파이썬에서 "중첩 된"for a, b in, for y, z와 같은 기능에 문제가있다. – Clev3r

4

함수는 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) 
+0

감사합니다, 나는 희망보다 조금 더 복잡하지만. – Clev3r

+0

@Clever 문제 없음 :) 아이디어는'key' 함수가'max'를 결정하는 특별한 방법을 제공한다는 것입니다. '(고양이, 4), ('개 ', 2), ('원숭이 ', 1)'과 같은 것이 있다면, 보통의 max를 취하면'원숭이' 문자열을 정렬 할 때 가장 큰 '값'입니다. 튜플의 number 요소를 기반으로 max를 찾고 싶다면'key'를 사용하고 사용하고자하는 것을 끌어내는 함수를 사용하십시오. 여기서 우리는'lambda x : x [1]'을 사용하는데, 이는 '이 목록에서 항목을 가져올 때 튜플의 두 번째 항목을 기준으로 비교합니다.'). 이것은'('cat', 4)'를 반환합니다. – RocketDonkey

+0

아, 그게 도움이됩니다. {{id_ : [val1, val2, val3]} 사전 매핑이 있다고 가정 해보십시오. 이 사전 기술을 "사전의 모든 val [0] 색인을 살펴보고"최대 값을 반환하는 데 어떻게 적용 할 수 있습니까? – Clev3r