2012-07-03 3 views
1

가변 길이의 쉼표로 구분 된 정수 문자열이 있다고 가정합니다. 문자열을 분리하고 정수를 변수에 저장하는 가장 좋은 방법은 무엇입니까?가변 길이 문자열을 파이썬에서 변수로 분할하는 가장 좋은 방법은 무엇입니까?

현재 다음과 같은 내용이 있습니다.

input = sys.argv[1] 
mylist = [int(x) for x in input.split(',')] 
if len(mylist) == 2: a, b = mylist 
else: a, b, c = mylist 

더 효율적인 방법이 있습니까?

+3

스플릿 파트는 별개의 변수에 넣는 것이 왜 쉬운가요? 그것은 단지 2 또는 3 일 것인가? – Collin

+3

만약 당신이 (입력에 따라) 그것을 만들지 않는다면'c'에 접근 할 것입니까? – eumiro

답변

8

은 파수 후 3 개 요소 목록을 제한 추가

a, b, c = (mylist + [None] * 3)[:3] 

자 A, B 및 C은 없음으로 설정 최소한이며, 경우에 항목의 수는 단지 세 개 이상의 최초로 3 개의 값이 사용됩니다.

데모 : 당신은, 적어도 두 요소를 필요로 적은 없음 값을 사용하고 ValueError를 잡을 경우

>>> mylist = [1, 2] 
>>> a, b, c = (mylist + [None] * 3)[:3] 
>>> print a, b, c 
1 2 None 
>>> mylist = [1, 2, 3, 4] 
>>> a, b, c = (mylist + [None] * 3)[:3] 
>>> print a, b, c 
1 2 3 

:

try: 
    a, b, c = (mylist + [None])[:3] 
except ValueError: 
    print "You mast specify at least 2 values" 
    sys.exit(1) 
+0

어딘가에서이 트릭을 알 수 있습니다 ...;) –

+0

@larsmans : 이봐 요, 당신은 모든 트릭을 가진 유일한 사람이 아닙니다. :-P 나는 생각 나게 함을 인정할 수 있습니다 ... –

+0

사실, 목록에는 최소한 두 개의 요소가 있어야하기 때문에 사실상 하나의 'None'을 추가하는 것이 더 좋을 수 있습니다. 그러나 당신은 이미 내 +1을가집니다. –

0

Martjin에 그냥 부록. 그것을 사용하는 이유를 보여주는 함수로 바꿨습니다.

def store(mylist,expsiz = 10, dflt = None): 
    return mylist + [dflt]*(expsiz-len(mylist)) 

>>> mylist = [1,2,5] 
>>> fixedlen = store(mylist) 
>>> print fixedlen 
[1,2,5,None,None,None,None,None,None,None] 
관련 문제