2013-06-11 3 views
1

저는이 특정 기능을 작동시키는 데는 매우 가깝지만 벽에 부딪혔습니다.파이썬 : 목록에 추가하십시오. IF 항목이 숫자가 아닙니다.

요소가 0.50보다 큰 경우에만 가장 가까운 정수로 반올림하려는 부동 소수점 목록이 있습니다. 예기치 않은 요소 (숫자가 아닌 요소)가있는 경우 그대로 두는 것이 좋습니다.

[str(int(round(float(x)))) if float(x) > 0.5 else str(x) for x in mylist] 

나는 내가 'ELIF'문하지만 어떻게 표현 임 확실하지를 추가해야 같은데요 :

mylist = ['58.20','34.99','0.39','0.89','34.55', '-'] 

예상 결과 여기

mylist = ['58','35','0.39','1','35', '-'] 

지금까지 내 코드입니다 어떻게 생겼어?

감사합니다.

+0

당신은 수레의 목록이없는; 문자열 목록이 있습니다. – geoffspear

+0

가끔 플로트가 아닌 문자열과 함께 플로트와 같은 문자열 목록이 있습니다. 수레 목록이 없습니다. 데이터 구조를 다시 생각하고 싶습니까? –

+0

.39는 .5보다 크지 않습니다. – squiguy

답변

1

여기에서 예외 처리를 사용할 수 있습니다

def solve(x): 
    try: 
     num = float(x) 
     return str(int(round(num))) if num > 0.50 else x 
    except ValueError: 
     return x 
...  
#Using list comprehension 
>>> [solve(x) for x in lis] 
['58', '35', '0.39', '1', '35', '-'] 
#using map 
>>> map(solve, lis) 
['58', '35', '0.39', '1', '35', '-'] 
관련 문제