2009-10-15 3 views
14

다음과 같은 형식의 데이터 문자열이 있습니다. xpos-ypos-zoom (즉, 8743-12083-15)로 분할하여 변수에 저장하고 싶습니다. xpos, ypos 및 zoom. 이 숫자로 계산을해야하기 때문에 처음부터 정수로 변환하고 싶습니다. 현재이 작업을 수행하는 방법은 다음 코드를 사용하는 것입니다.파이썬에서 분할 함수에서 int로 문자열을 변환하는 효율적인 방법

file = '8743-12083-15' 
xval, yval, zoom = file.split("-") 
xval = int(xval) 
yval = int(yval) 

이 작업을 수행하는보다 효율적인 방법이 있어야합니다. 어떤 아이디어?

답변

37

내 독창적 인 제안은 목록을 포함하고 있습니다.

test = '8743-12083-15' 
lst_int = [int(x) for x in test.split("-")] 

편집 :

항상 테스트해야 뭔가 (CPU-cyclewise) 가장 효율적인되는 때문이다. 내 Python 2.6 설치에 대한 몇 가지 빠른 테스트는 지도이 아마도 여기에 (값으로 분할 된 문자열에서 정수 목록을 작성하는) 가장 효율적인 후보라고 나타냅니다. ... 차이점이 정말 당신이 시간의 수백만을하고 (그리고 입증 된 병목)까지 중요하지 않습니다 너무 작다는 사실을

def v1(): 
return [int(x) for x in '8743-12083-15'.split('-')] 

def v2(): 
return map(int, '8743-12083-15'.split('-')) 

import timeit 
print "v1", timeit.Timer('v1()', 'from __main__ import v1').timeit(500000) 
print "v2", timeit.Timer('v2()', 'from __main__ import v2').timeit(500000) 

> output v1 3.73336911201 
> output v2 3.44717001915 
+3

지도는 내장 함수를 사용할 때 일반적으로 이해가 빠르며 빠르며 사용자 정의 함수 (람다 포함)를 사용하는 경우 속도가 느립니다. –

5

각 문자열에 기능 intmap, 또는 list comprehension 사용할 수 있습니다 파이썬 3.x에서 작업하지 않는 한 필요하지 않습니다 list에 대한 호출 위에서

>>> file = '8743-12083-15' 
>>> list(map(int, file.split('-'))) 
[8743, 12083, 15] 
>>> [int(d) for d in file.split('-')] 
[8743, 12083, 15] 

을 (파이썬 2.x에서 map은 파이썬 3.x에서리스트를 리턴합니다.)

세 변수에 직접 지정하는 것도 가능합니다 (이 경우 목록 이해 대신에 generator expression).

>>> xval, yval, zval = (int(d) for d in file.split('-')) 
>>> xval, yval, zval 
(8743, 12083, 15) 
+0

당신이 목록을해야합니까 그림자로 file()를 호출? map이 목록을 반환합니다 ... –

+2

Python 3에 없습니다 –

+0

흥미 롭습니다, p3k에 대해 배웠던 또 하나의 점 : D –

10

코드 줄 수가 더 적습니까?

(xval,yval,zval) = [int(s) for s in file.split('-')] 
+1

I 이 대답은 "가장 중요한 코드를 작성하고 다른 중요한 항목으로 이동하는 것과 나중에 내가 언제 돌아 왔는지 이해하는 것"과 같이 효율적이라고 선언합니다. 이 특정 코드 줄로부터 1 초 정도의 성능을 얻으려는 시도는 불필요한 최적화의 타피트 (Tarpit of Unnecessary Optimization)를 우회하는 것입니다. – PaulMcG

+0

나는 일반적으로 동의하고 정확히 내가 왜 브러시를 내지 않았는가하는 것이다. (나는 발전기 표현 등을 알고있다.) 그러나 문제의 문제가 * 3 * 요소에 관한 것이므로 –

4

참고 참고 : 다른 이름을 선택 할 수 있습니다 그것은 buildtin

이 파이썬 2에서 작동하고 3


xval,yval,zval = map(int,file.split('-')) 
관련 문제