2013-04-18 1 views
-3

나는 문자열을 가지고 = "2 : 1,3 : 2,4 : 5,7 : 5" 기본적으로 이것을 나눠서 2,3,4,7을 정수 목록에 할당하고 1,2, 5,5를 다른 사람에게 보냈습니다. 나는 b = a.split (":")을 먼저 시도한 다음 c = b.split (",")을 시도했습니다. 21,32 등을 받았습니다.파이썬 문자열을 간격으로 잘라내시겠습니까?

이 일을하는 길을 제안해라. 나는 내 머리 위로 들어갔다.

+1

당신이 제안한 것을 시도 할 수는 없습니다. 'b = a.split (":")''[ '2', '1,3', '2,4', '5,7', '5']'리스트를 반환합니다. 그러면'c = b.split (",")'은 AttributeError : 'list'객체를 발생시킵니다. 'split'속성은 없습니다. 그러므로 실제 코드를 알려주십시오. – abarnert

+0

죄송합니다. b = "". 조인 ((a.split (":")) –

+0

글쎄, 그게 정확히 어디에 문제가 있었는지에 대해 언급 한 것을 잊어 버렸습니다.'':''에' join '결과는 모든':'문자를 제거하는 복잡한 방법입니다 ... – abarnert

답변

3

내가 사용하는 말처럼 원격으로도 무엇이든 21을 얻는 방법을 모르겠습니다.

하지만 제대로 된 것 같습니다. 단계별로 살펴 보겠습니다. 당신이 21 첫째, 다음 32 등 얻을 싶었 기 때문에

>>> a="2:1,3:2,4:5,7:5" 
>>> b=a.split(":") 
>>> b 
['2', '1,3', '2,4', '5,7', '5'] 

OK, 즉, 옳지 않다.

>>> b=a.split(',') 
>>> b 
['2:1', '3:2', '4:5', '7:5'] 

OK, 지금 우리는 split 해당 list의 각 일을합니다. 어떻게해야합니까? 당신은 for 루프를 작성하거나 map를 사용하지만, 지능형리스트는 아마 가장 간단 수 :

>>> c=[element.split(':') for element in b] 
[['2', '1'], ['3', '2'], ['4', '5'], ['7', '5']] 

지금 당신은 당신이 목록을 가지고 있지만, 그들이 함께 압축하고 있습니다. 어떻게 압축을 풀습니까? 지퍼로!

>>> d, e = zip(*c) 
>>> d 
('2', '3', '4', '7') 
>>> e 
('1', '2', '5', '5') 

는 이제 거의 다,하지만 당신은이 정수의 목록, 문자열이 아닌의 튜플되고 싶어요. 구조에 다시 열거하십시오 :

>>> f = [int(element) for element in d] 
>>> g = [int(element) for element in e] 
>>> f 
[2, 3, 4, 7] 
>>> g 
[1, 2, 5, 5] 
+0

죄송합니다. b = "". join ((a.split (":")) .but을 사용했음을 언급하는 것을 잊어 버렸습니다. 그러나이 문제에 익숙하지 않고 im이 python을 사용하도록 강요하여 zip을 알았습니다. 감사합니다. –

1
In [8]: a = "2:1,3:2,4:5,7:5" 

In [9]: b, c = zip(*[map(int, t.split(':')) for t in a.split(',')]) 

In [10]: b 
Out[10]: (2, 3, 4, 7) 

In [11]: c 
Out[11]: (1, 2, 5, 5) 
여기

, bc는 튜플이다. 필요한 경우 list()으로 전화하여 목록으로 전환하십시오.

+0

죄송합니다. b = "". join ((a.split (":")) .but을 사용했음을 언급하는 것을 잊어 버렸습니다. 그러나 나는 이것에 익숙하지 않고 im이 python을 사용하도록 강요하여 zip을 알았습니다. 감사합니다. –

0

은 당신이 뭔가를 할 수 있습니다 :

>>> a = "2:1,3:2,4:5,7:5" 
>>> l1, l2 = zip(*(map(int, p.split(':')) for p in a.split(','))) 
>>> l1 
(2, 3, 4, 7) 
>>> l2 
(1, 2, 5, 5) 

a.split(',') 꽤 자기 설명이다. map(int, p.split(':')) for p in a.split(',')은 결과 숫자 쌍을 각각 분리 한 다음 정수로 변환합니다.

zip(*(...))은 생성자를 가져와 각 쌍의 첫 번째 요소를 하나의 목록에 넣고 두 번째 요소를 다른 목록에 넣습니다.

l1, l2 = ...은 튜플 압축 풀기입니다. 기본적으로 l1 = ...[0]l2 = ...[1]의 약어입니다.


또 다른 방법은 다음과 같습니다

>>> l = map(int, a.replace(',', ':').split(':')) 
>>> l 
[2, 1, 3, 2, 4, 5, 7, 5] 
>>> l1, l2 = l[::2], l[1::2] 

이 콜론에 쉼표를 변환 한 다음은 .split()로를 분할 할 수 있습니다. l[::2]은 모든 짝수 요소를 반환하고 l[1::2]은 모든 홀수 요소를 반환합니다.

+1

직장에서의 집단 지성! 13 초 간격 : – NPE

+0

미안 나는 b를 사용한다는 것을 잊어 버렸다. = ""join ((a.split (":"))). 그러나 나는 이것에 익숙하지 않고 im은 python을 사용하도록 강요했다. 그래서 나는 zip에 대해 알고 있었다. 고마워. –

관련 문제