문자열을 단어별로 바꾸는 것은 매우 일반적인 인터뷰 질문입니다. Python으로 구현하는 것은 매우 간단합니다.
def reverse_string_by_word(s): lst = s.split() # split by blank space by default return ' '.join(lst[::-1]) s = 'Power of Love' print reverse_string_by_word(s) # Love of Power s = 'Hello World!' print reverse_string_by_word(s) # World! Hello
위 구현은 실제로 대부분의 상황을 충족할 수 있지만 완벽하지는 않습니다. 예를 들어, 두 번째 문자열의 느낌표는 반전되지 않으며 원래 문자열의 공백 수도 유지되지 않습니다. (위 예에서는 실제로 Hello와 World 사이에 공백이 두 개 이상 있습니다.)
우리가 기대하는 결과는 이렇습니다.
print reverse_string_by_word(s) # Expected: !World Hello
문제를 복잡하게 하지 않고 위의 솔루션을 개선하려면 re 모듈을 사용하는 것이 좋습니다. re.split()의 공식 문서를 확인할 수 있습니다. 구체적인 예를 살펴 보겠습니다.
>>> import re >>> s = 'Hello World!' >>> re.split(r'\s+', s) # will discard blank spaces ['Hello', 'World!'] >>> re.split(r'(\s+)', s) # will keep spaces as a group ['Hello', ' ', 'World!'] >>> s = '< Welcome to EF.COM! >' >>> re.split(r'\s+', s) # split by spaces ['<', 'Welcome', 'to', 'EF.COM!', '>'] >>> re.split(r'(\w+)', s) # exactly split by word ['< ', 'Welcome', ' ', 'to', ' ', 'EF', '.', 'COM', '! >'] >>> re.split(r'(\s+|\w+)', s) # split by space and word ['<', ' ', '', 'Welcome', '', ' ', '', 'to', '', ' ', '', 'EF', '.', 'COM', '!', ' ', '>'] >>> ''.join(re.split(r'(\s+|\w+)', s)[::-1]) '> !COM.EF to Welcome <' >>> ''.join(re.split(r'(\s+)', s)[::-1]) '> EF.COM! to Welcome <' >>> ''.join(re.split(r'(\w+)', s)[::-1]) '! >COM.EF to Welcome< '
슬라이스를 사용하여 시퀀스를 뒤집는 것이 가독성이 좋지 않다고 생각되면 실제로 이렇게 작성할 수 있습니다.
>>> ''.join(reversed(re.split(r'(\s+|\w+)', s))) '> !COM.EF to Welcome <'
한 문장으로 하면 되니까 너무 쉽죠!
파이썬 역방향 문자열 에는 총 5가지 메서드가 포함되어 있는데, 첫 번째 메서드가 가장 간단합니다. 즉, 단계 크기가 -1이고 문자열이 출력됩니다.
1. 단순 단계 크기는 -1이며, 이는 문자열의 뒤집기(일반적으로 사용됨)입니다.
2. 앞 글자와 뒤 글자의 위치를 바꿉니다.
3. 재귀적 방법, 한 번에 한 문자씩 출력
4. 이중 종료 큐, 확장왼쪽() 함수를 사용하세요.
5. for 루프를 사용하여 왼쪽에서 오른쪽으로 출력합니다.
# -*- coding: utf-8 -*- #eclipse pydev, python 3.3 #by C.L.Wang #time: 2014. 4. 11 string = 'abcdef' def string_reverse1(string): return string[::-1] def string_reverse2(string): t = list(string) l = len(t) for i,j in zip(range(l-1, 0, -1), range(l//2)): t[i], t[j] = t[j], t[i] return "".join(t) def string_reverse3(string): if len(string) <= 1: return string return string_reverse3(string[1:]) + string[0] from collections import deque def string_reverse4(string): d = deque() d.extendleft(string) return ''.join(d) def string_reverse5(string): #return ''.join(string[len(string) - i] for i in range(1, len(string)+1)) return ''.join(string[i] for i in range(len(string)-1, -1, -1)) print(string_reverse1(string)) print(string_reverse2(string)) print(string_reverse3(string)) print(string_reverse4(string)) print(string_reverse5(string))
fedcba fedcba fedcba fedcba fedcba