반응형
Python에서 한 번에 여러 요소를 선택하는 것을 반복합니다.
특정 길이의 조각에 대해 반복하고 싶은 목록이 있습니다. 예를 들어 다음과 같습니다.
>>> seq = 'ABCDEF'
>>> [''.join(x) for x in zip(seq, seq[1:], seq[2:])]
['ABC', 'BCD', 'CDE', 'DEF']
즉, 각 하위 시퀀스의 길이를 지정할 수 있는 단축형이 있습니까?
우아한 해결책은 아니지만 다음과 같은 효과가 있습니다.
seq = 'ABCDEF'
n=3
[seq[i:i+n] for i in range(0, len(seq)+1-n)]
유사한 것에 대한 파이썬 코드입니다.
이것의 훨씬 우아하고 추천되는 버전은 파이썬의 라이브러리를 사용하는 것이다(심각하게도, 그들은 왜 이 기능을 라이브러리에 포함시키지 않는가?
이 경우 설명서에 제공된 기능과 유사한 기능을 대신 사용할 수 있습니다.
from itertools import tee
def tripletWise(iterable):
"s -> (s0,s1,s2), (s1,s2,s3), (s2,s3,s4), ..."
a, b, c = tee(iterable, 3)
next(b, None)
next(c, None)
next(c, None)
return zip(a, b)
[''.join(i) for i in tripletWise('ABCDEF')]
> ['ABC', 'BCD', 'CDE', 'DEF']
또한 목록을 한 번에 선택할 요소의 개수로 청크하는 더 일반적인 함수를 만들 수 있습니다.
def nWise(iterable, n=2):
iterableList = tee(iterable, n)
for i in range(len(iterableList)):
for j in range(i):
next(iterableList[i], None)
return zip(*iterableList)
[''.join(i) for i in nWise('ABCDEF', 4)]
> ['ABCD', 'BCDE', 'CDEF']
도구 예제에서 groupper()를 사용합니다. 구체적으로.
https://docs.python.org/3/library/itertools.html#itertools-recipes
또는 같은 페이지에서 더 많은 도구를 설치하는 것이 좋습니다. 그런 다음 또는 를 사용할 수 있습니다.
https://pypi.org/project/more-itertools/
반응형
'개발하자' 카테고리의 다른 글
Fast 테스트 방법이미지를 소비하는 API 끝점? (0) | 2022.12.05 |
---|---|
Excel 데이터에서 Python 사전 만들기 (0) | 2022.12.05 |
매트랩의 벡터 할당을 파이썬 형태로 변환 (1) | 2022.12.04 |
iOS - 코코아팟은 당신의 단말기가 UTF-8 인코딩을 사용하고 있어야 한다 - 최신 플러터 업그레이드 후. (0) | 2022.12.03 |
펄럭이는 텍스트의 최소 높이 설정 (0) | 2022.12.03 |