>  기사  >  백엔드 개발  >  Python에서 문자열을 뒤집는 문제에 대해 간략하게 설명합니다.

Python에서 문자열을 뒤집는 문제에 대해 간략하게 설명합니다.

WBOY
WBOY원래의
2016-12-05 13:27:131061검색

문자열을 단어별로 바꾸는 것은 매우 일반적인 인터뷰 질문입니다. 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이고 문자열이 출력됩니다.

방법은 다음과 같습니다


5가지 방법 비교:


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 

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.