2011-10-22 9 views
1

파이썬 2.4.x에서파이썬 - 조건부 분할 라인

내가에서 읽고 있어요 일련의 선이 - 재 배열 한 다음 다른 목록 안에 중첩 된 목록으로 각 라인을 만드는.

다음이 있습니다.

testposition = (22, 3, 1, 2, 18, 19, 5, 6, 8, 9, 12, 23, 24, 25, 26, 27, 28) 

def giveme(s, words=()): 
    lista = s.split() 
    return [lista[item-1] for item in words] 

for rec in testline: 
    testlist.append(giveme(rec, testposition)) 

다른 말로하면 - 전달되는 레코드가.

Lorem ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi rhoncus ut aliquet 

이 줄의 목록은 다음과 같습니다. (재 배열 후). (이 목록은 다른 목록 - 중첩 목록에 추가됩니다).

환상적으로 좋습니다. 그러나 내가 뭘하고 싶은지는 지난 6 일을 마치고 같이 그룹화하는 것입니다.

['interdum', 'dolar', 'Lorem', 'ipsum', 'risus', 'eu', 'amet', 'consectetur', 'elit', 'In', 'nec', 'Nunc dui mi rhoncus ut aliquet'] 

그리고

라인은 28 개 요소가없는 통과 만 25 말되는 경우 - 그것보다 22 요소를 넘어 어떤 단지 그룹 - (텍스트 라인 후 같은 라인되지 않습니다). 상기 예 즉

이 하나 갖고, 28 개 요소가 25

로렘 입숨 슬픔 tristique CRAS faucibus risus EU ODIO pharetra interdum 눈크 DUI MI

을 ornare 이력서 neque에 NEC의 마그나 consectetur의 adipiscing의 ELIT를 AMET 앉아

및 결과 목록은 다음과 같습니다 분명

['interdum', 'dolar', 'Lorem', 'ipsum', 'risus', 'eu', 'amet', 'consectetur', 'elit', 'In', 'nec', 'Nunc dui mi'] 

희망 - 어떤 아이디어?

감사합니다.

+0

는이 전치 행렬의 끝에서 순차적으로 실행을 지시하고있는 유일한 방법입니다 산출 동안? –

답변

3

두 번째 인수를 str.split에 제공하면 수행 할 분할 수를 제어 할 수 있습니다.

testposition = (22, 3, 1, 2, 18, 19, 5, 6, 8, 9, 12, 23) 

def giveme(s, words=()): 
    lista = s.split(' ',22) 
    result=[lista[item-1] for item in words] 
    return result 

rec='Lorem ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi rhoncus ut aliquet' 
print(giveme(rec, testposition)[-1]) 

수익률

'Nunc dui mi rhoncus ut aliquet' 

rec='Lorem ipsum dolor sit amet consectetur adipiscing elit In vitae neque nec magna tristique ornare Cras faucibus risus eu odio pharetra interdum Nunc dui mi' 
print(giveme(rec, testposition)[-1]) 

'Nunc dui mi' 
+0

일해 주셔서 감사합니다. 대단히 감사합니다. – Chasester

0

사용 array slices : 당신이 첫 번째 22 개 단어를 재 배열하려는 줄 것을 가정

lista[:11] + [' '.join(lista[11:])] 
0

: 당신은 당신이 재 배열 할 부분 만 선택 슬라이스 순서를 사용할 수 있습니다

testposition = (22, 3, 1, 2, 18, 19, 5, 6, 8, 9, 12) 

def giveme(s, words=()): 
    lista = s.split() 
    maxpos = max(testposition) 
    return [lista[item-1] for item in words[:maxpos]] + words[maxpos:] 

for rec in testline: 
    testlist.append(giveme(rec, testposition))