2012-04-11 4 views
0
sum(int(i.replace(',',''))if re.search('\d',i)!=None for i in list) 

목록의 모든 요소를 ​​합산하고자합니다. 문제는 요소가 문자열이며, 그 중 일부는 숫자가 있고 정수로 변환 한 다음 추가하는 것입니다. 그래서 문자열에 숫자가 있는지 확인해야합니다. sum 함수의 목록에 조건을 추가하려면 어떻게합니까? 또한 목록을 반복하고 변수에 추가하고 싶지 않은 sum 함수를 사용하려고합니다.조건 (파이썬) 아래 목록의 요소 합계

+3

예를 들어 출력 할 수 있습니까? –

+0

필터를 사용하여 요구 사항을 수정하는 기능을 갖춘 목록 이해가가는 길입니다. – TimothyAWiseman

답변

3

같은. 당신은 if가 마지막에 오는 것을 제외하고, 거의 다 왔어

:

sum(int(i.replace(',','')) for i in list if re.search(r'\d', i)) 

가이 말을하는 데, 전반적인 접근 방법은 방탄이 아니다. 다른 문자 (예 : 'a1')와 숫자가 섞여있는 입력을 차단합니다.

또한 1000 단위 구분 기호로 쉼표를 사용하는 것이 일반적이 아닙니다. Some locales 이것을 사용하여 기점을 표시합니다. 이러한 로케일에서 코드는 쉼표가있는 숫자에 대해 잘못된 값을 생성합니다.

1

어쩌면 내가 sum 함수의 목록에 조건을 추가 할 수있는 방법이

def safeIntToSum(x): 
    try: return int(x.replace(",","")) 
    except: return 0 

print sum([safeIntToSum(x) for x in list]) 
+0

먼저 목록으로 바꾸지 않으면 약간 빠르다고 생각합니다. 예. 'sum (목록의 x에 대한 safeIntoSum (x)) –