2012-04-24 2 views
0

파이썬에서 두 개의 문자열 (숫자 만)이 있다고 가정합니다. 예를 들어 문자열 a와 문자열 b가 있습니다. c = a.b라는 숫자를 생성하는 가장 빠른 방법은 무엇입니까 (정수 부분과 b 소수 부분)?파이썬에서 두 개의 숫자를 연결하는 가장 빠른 방법

+1

건설적이지 않은 것으로 마감. 선행 연구가 있었다면 (실제로는 사전에 노력하지 않았기 때문에 -1), 당신이 알고있는 다양한 접근법의 벤치 마크와 같은 * 유머가 있습니다. –

+1

@pst : 내 +1. 바보 같은 질문은 없습니다. 이것은 분명히 아닙니다. 당신은 뒤에있는 동기를 모른다. 그리고 그 답은 가장 빠른 해결책이 처음에는 고려되지 않았다는 것을 증명합니다. 가치있는 토론이 있습니다. – pepr

+0

@pepr "어리석은 질문"이 없다고 가정하면 여전히 "조사되지 않은 질문"이 있으며, 근거가 없기 때문에 일반적으로 매우 "토론"을합니다. 이것은 하나입니다. 다시 말하지만, * 이전 작업/연구가 끝나면 (그리고 보여지는) * 나는 그것을 유머러스하게 할 것이다. –

답변

1

floatformat을 사용하십시오.

>>> a, b = '12', '345' 
>>> float('{0}.{1}'.format(a, b)) 
12.345 

편집 : (나는 속도 w.r.t. 다른 솔루션을 테스트하지 것처럼)이 가장 빠른 주장 할 수 있지만, 작업을 끝낼 않습니다.

+0

짧은 문자열에서는 가장 빠를 수는 없지만 가장 빠르지는 않습니다. 이전 스타일의 포맷팅은 새로운 스타일의 포맷보다 더 빠릅니다 (적어도 사용한 파이썬 버전의 경우). 문자열을 짧게 만들면 문자열을 더 빨리 만들 수 있으며, 문자열 포맷 기능이 필요하지 않습니다. 문자열이 많지 않습니다. – agf

+0

@agf 흥미 롭습니다. 나는 옛날 스타일 형식이 2.x에서 더 빠르다는 것을 몰랐다. 호기심에서 3.x의 속도를 비교해 보았습니까? (나는 그렇지 않다) –

+0

나는 3.2에서 여전히 느리다 고 믿지만 지금은 테스트 할 수 없다. – agf

0

a 또는 b이 정수 (예를 들어 경우뿐만 아니라 숫자)로 변환 할 수없는 ValueError 경우 올릴 것이다 : 빨리는 측면에서 의미하는 경우

float('%d.%d' % (int(a), int(b))) 

3

(파이썬 2.7에서 테스트를)

float("%s.%s"% ("12", "345")) 

timeit 결과 :

속도의 내 사용은 날이 좋습니다
>>> timeit.Timer('float("%s.%s"% ("12", "245"))').timeit() 
0.39421987533569336 

>>> timeit.Timer('float("{0}.{1}".format("12", "245"))').timeit() 
0.573634147644043 
+1

그냥 궁금해서 파이썬 2.x 나 3.x를 사용하고 있습니까? –

+0

2.7.1 Mac. 그리고 추가하기 위해 미리 할당을 사용하면 약간 느려지지만 형식에는 여전히 불이익이 있습니다. – petr

3

원시 형식 (가장 빠를 수 있습니까?) : float(str(a) + '.' + str(b))

이 솔루션은 형식 문자열을 구문 분석 할 필요가 없습니다. [불신자에 대한 답변으로 추가]

설명의

>>> timeit.Timer('float("%s.%s"% ("12", "245"))').timeit() 
1.147318164738806 
>>> timeit.Timer('float("{0}.{1}".format("12", "245"))').timeit() 
1.5033958226534452 
>>> timeit.Timer('float("12" + "." + "245")').timeit() 
0.6646503955111598 

부분은 항상 심지어 INT 인수 %s을 쓸 수있을 수 있습니다. % 또는 via .format()을 통해 형식을 지정하면 추가 문자열 변환이 발생할 가능성이 있습니다.

+0

'+'를 사용하면 문자열이 변경되지 않기 때문에 버려지는 여분의 객체를 생성합니다. – Daenyth

+0

대안은 그렇게하지 않습니까? –

+0

문자열 서식을 사용하지 않습니다. 귀하의 예제에서, 당신은 a와 b에 대해 새로운 str을 만들고, +에 대해 새로운 str을 만듭니다.', then + b – Daenyth

관련 문제