2014-01-29 12 views
2

, 나는 같은 argmax 계산할 수 :argmax를 계산하는 비극적 인 방법은 무엇입니까? 내가 점수를 계산하는 목록과 기능이있는 경우

maxscore = 0; argmax = None 
x = [3.49, 0.122, 293, 0.98] # Imagine a LARGE list. 
for i in x: 
    # Maybe there're some other func() to calculate score 
    # For now just sum the digits in i. 
    score = sum([int(j) for j in str(i) if j.isdigit()]) 
    print i, score 
    if maxscore < score: 
     maxscore = score 
     argmax = i 

argmax을 달성하기 위해 다른 방법이 있나요? 이렇게하는 비법은 무엇입니까?

답변

8
def score(i): 
    return sum([int(j) for j in str(i) if j.isdigit()]) 

max(x, key=score) 
+0

더 나은 내가 충분히 가까이 자신의 코드를 읽어 didnt는 : P를 –

0

가 아닌 유니 코드 문자열의 큰 목록이에게 많이 할 거라면 가능 수행 할 수 있습니다, 그것은 프로세스의 너무 많은 물건을 설정하는 일회성 오버 헤드 가치가있을 수도 있습니다 C로 작성 상대적으로 간단한 테이블 조회 및 내장 방법을 통해 (string_translate() CPython과에서와 같이) :

x = [3.49, 0.122, 293, 0.98] 

digits = set(range(ord('0'), ord('9')+1)) 
transtable = ''.join(chr(i-ord('0')) if i in digits else chr(0) 
         for i in range(256)) 
deletechars = ''.join(chr(i) for i in range(256) if i not in digits) 

def sum_digit_chars(i): 
    return sum(bytearray(str(i).translate(transtable, deletechars))) 

print max(x, key=sum_digit_chars)