[PYTHON] delimiter word에 기반한리스트 분할하기
PYTHONdelimiter word에 기반한리스트 분할하기
다양한 문자열 값을 포함하는 목록이 있습니다. WORD를 볼 때마다 목록을 분할하고 싶습니다. 결과는 정확히 하나의 인스턴스를 포함하는 목록 (원래 목록의 하위 목록이 될 것입니다)입니다. 루프를 사용하여이 작업을 수행 할 수 있지만이를 수행하는 데 좀 더 비범 한 방법이 있습니까?
예 = [ 'A', 'WORD', 'B', 'C', 'WORD', 'D']
결과 = [[ 'A'], [ 'WORD', 'B', 'C'], [ 'WORD', 'D']]
이것은 내가 시도한 것입니다. 그러나 WORD가 있어야 할 다른 목록에 WORD를 넣을 것이므로 실제로 원하는 것을 얻지 못합니다.
def split_excel_cells(delimiter, cell_data):
result = []
temp = []
for cell in cell_data:
if cell == delimiter:
temp.append(cell)
result.append(temp)
temp = []
else:
temp.append(cell)
return result
해결법
-
==============================
1.발전기를 사용합니다.
발전기를 사용합니다.
def group(seq, sep): g = [] for el in seq: if el == sep: yield g g = [] g.append(el) yield g ex = ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D'] result = list(group(ex, 'WORD')) print(result)
이 지문
[['A'], ['WORD', 'B', 'C'], ['WORD', 'D']]
이 코드는 반복 가능한 모든 내용을 받아들이고, 반복 가능 (iterable)을 생성합니다 (원하지 않으면 목록에 병합 할 필요가 없습니다).
-
==============================
2.
import itertools lst = ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D'] w = 'WORD' spl = [list(y) for x, y in itertools.groupby(lst, lambda z: z == w) if not x]
구분 기호가없는 분할 된 목록이 만들어지며 이는 나에게 더 논리적입니다.
[['A'], ['B', 'C'], ['D']]
포함 할 구분 기호를 사용하려면이 트릭을 수행해야합니다.
spl = [[]] for x, y in itertools.groupby(lst, lambda z: z == w): if x: spl.append([]) spl[-1].extend(y)
-
==============================
3.@ NPE의 해결책은 나에게 매우 파이썬 적으로 보인다. itertools를 사용하는 또 다른 방법은 다음과 같습니다.
@ NPE의 해결책은 나에게 매우 파이썬 적으로 보인다. itertools를 사용하는 또 다른 방법은 다음과 같습니다.
from itertools import izip, chain example = ['A', 'WORD', 'B' , 'C' , 'WORD' , 'D'] indices = [i for i,x in enumerate(example) if x=="WORD"] pairs = izip(chain([0], indices), chain(indices, [None])) result = [example[i:j] for i, j in pairs]
이 코드는 주로이 대답을 기반으로합니다.
-
==============================
4.주어진
주어진
import more_itertools as mit iterable = ["A", "WORD", "B" , "C" , "WORD" , "D"] pred = lambda x: x == "WORD"
암호
list(mit.split_before(iterable, pred)) # [['A'], ['WORD', 'B', 'C'], ['WORD', 'D']]
more_itertools는> pip install more_itertools를 통해 설치 가능한 타사 라이브러리입니다.
split_at 및 split_after를 참조하십시오.
from https://stackoverflow.com/questions/15357830/python-splitting-a-list-based-on-a-delimiter-word by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 다른 변수를 기반으로 주문을 보존하여 collect_list (0) | 2018.11.16 |
---|---|
[PYTHON] 파이썬 : 폴더에서 몇 개의 json 파일 읽기 (0) | 2018.11.16 |
[PYTHON] if와 break로 파이썬 목록 이해하기 (0) | 2018.11.16 |
[PYTHON] 온 - 디스크 데이터베이스와 빠른 인 - 메모리 데이터베이스 사이를왔다 갔다합니까? (0) | 2018.11.16 |
[PYTHON] BeautifulSoup4가 숨어있는 곳은 어디입니까? (0) | 2018.11.16 |