Coding/Python

[python]문자열 reverse, reversed

후__아 2024. 4. 19. 14:28

※ 리스트.reverse()

해당 리스트 역순으로 수정해줄 뿐 None return => list에서만 제공되는 함수!!!

a_li = ['a', 'b', 'c', 'd']

b_li = a_li.reverse()

print(b_li)   # none

print(a_li)   # ['d', 'c', 'b', 'a']

 

※ reversed(리스트/튜플/문자열)

역순으로 된 reversed 객체 return!

list(reversed(a_li))          # ['d', 'c', 'b', 'a']

or ''.join(reversed(a_li))   # 'dcba' 처럼 활용가능!

https://itholic.github.io/python-reverse-reversed/

 

※ 문자열 뒤집기(역순 출력)

문자열은 슬라이싱(인덱스)으로 추출, 접근은 가능하지만 수정은 불가능!!!

a_li[::-1]     # ['d', 'c', 'b', 'a']

a_li[1:3][::-1]    # ['c', 'b']   # 중간 추출한 리스트 역순!

https://blockdmask.tistory.com/581

# 프로그래머스 문자열 여러 번 뒤집기
# my_string "rermgorpsam" -> queries[[2, 3], [0, 7], [5, 9], [6, 10]] 인덱스 부분 뒤집기
def solution(my_string, queries):
    # 1) str[::-1] 활용하려가다가 망함ㅎ
    # +인덱싱 엉뚱하게 함;
    for s, e in queries:
        my_string = my_string[:s] + my_string[e:s:-1] + my_string[e+1:]
        # my_string = my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:] # 옳은 방법
    return my_string
    
    # 2) string.replace() 쓰려다가 망함ㅎ => 테스트 케이스 시간초과
    for s, e in queries:
        my_string = my_string.replace(my_string[s:e+1], ''.join(reversed(list(my_string[s:e+1]))))
    return my_string
    
    # 3) 리스트로 변환 후 reverse!
    str = list(my_string)
    for s, e in queries:
        str[s:e+1] = reversed(list(str[s:e+1]))
    return ''.join(str)
    
    
# 프로그래머스 문자열 뒤집기
def solution(my_str, s, e):
    return my_str[:s] + my_str[s:e+1][::-1] + my_str[e+1:]