Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 문자열을 N 크기씩 분할하는 방법

문자열 s와 정수 n이 주어졌을 때, s를 길이가 n인 조각들로 나누어야 하는 경우가 자주 있습니다.

예를 들어, 입력이 s = "abcdefghijklmn", n = 4라면 출력은 ['abcd', 'efgh', 'ijkl', 'mn']이 됩니다. 이때 마지막 조각은 남은 문자만 포함하기 때문에 길이가 n보다 짧을 수 있다는 점에 유의하세요.

해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 인덱스 변수 i를 0으로 초기화합니다.
  • 결과를 저장할 빈 리스트 f를 생성합니다.
  • i가 문자열의 길이보다 작은 동안 반복합니다.
    • s[i]부터 s[i+n-1]까지의 부분 문자열(슬라이싱)을 f의 끝에 추가합니다.
    • i를 n만큼 증가시킵니다.
  • 반복이 끝나면 f를 반환합니다.

파이썬의 슬라이싱(slicing)은 인덱스가 문자열 범위를 벗어나도 오류 없이 자동으로 처리해 주기 때문에, 마지막 조각이 n보다 짧아도 안전하게 잘려 나옵니다.

구현 예제

class Solution:
    def solve(self, s, n):
        i = 0
        f = []
        while(i < len(s)):
            f.append(s[i:i+n])
            i += n
    return(f)

ob = Solution()
print(ob.solve("abcdefghijklmn", 4))

입력

"abcdefghijklmn", 4

출력

['abcd', 'efgh', 'ijkl', 'mn']

더 간결한 방법: 리스트 컴프리헨션

같은 로직은 리스트 컴프리헨션(list comprehension)을 사용하면 한 줄로 표현할 수 있습니다.

def solve(s, n):
    return [s[i:i+n] for i in range(0, len(s), n)]

print(solve("abcdefghijklmn", 4))  # ['abcd', 'efgh', 'ijkl', 'mn']

range(0, len(s), n)은 0부터 문자열 길이까지 n 간격으로 인덱스를 생성하므로, while 루프와 동일한 결과를 훨씬 간결하고 파이썬답게 얻을 수 있습니다. 실무에서는 가독성과 유지보수 측면에서 이 방식을 더 많이 사용합니다.