2013-05-03 1 views
0

string을 포함하는 list을 가지므로 string ('')을 포함하는 각 지점에서 list을 분할하려고합니다.파이썬에는 구분 기호를 사용하여 목록을 분할하는 기능이 있습니까?

['this', 'is', '', 'an', 'example'] 

나는이 수행하는 발전기 썼다

[['this', 'is'], ['an', 'example']] 

가되어야이 꽤 일반적으로 보이는 때문에 나는 약간 유사한 기능을 놓친 나에 패턴과 관련된 경우, 궁금 해서요

def split(it, delimiter): 
    it = iter(it) 
    buffer = [] 
    while True: 
     element = next(it) 
     if element != delimiter: 
      buffer.append(element) 
     elif buffer: 
      yield buffer 
      buffer = [] 

itertools 또는 다른 곳에서 ...?

답변

3
>>> from itertools import groupby 
>>> words = ['this', 'is', '', 'an', 'example'] 
>>> [list(g) for k, g in groupby(words, ''.__ne__) if k] 
[['this', 'is'], ['an', 'example']] 
>>> [list(g) for k, g in groupby(words, 'is'.__ne__) if k] 
[['this'], ['', 'an', 'example']] 
+0

나는'' '.__ ne__'보다는 람다 함수를 사용할 것이라고 생각합니다. 그러나 아이디어는 같고 이것은 트릭을 능숙하게합니다. +1. – mgilson

+0

이 문맥에서'k'를 이해하는 방법? –

+0

@ThijsvanDien'' '.__ ne__','k'가'True' 인 경우 각 항목이'''와 같지 않은지 확인한 다음 항목이''''과 동일하지 않으므로'k' 'False'이면 항목은''''와 같으므로 건너 뜁니다. – jamylak

0

간단히 말해 slice the list 일 수 있습니다. 단락 기호 색인 만 있으면됩니다.

관련 문제