본문 바로가기

컴린이 일기장/Today I Learned

[TIL] 파이썬 문자열 조작 / Deque

반응형

[주절주절]

하루만에 밀리다니...

 

[Today I Learned]

# isalpha(), isalnum()

- 제약 조건에 대한 전처리를 위해 사용할 수 있다.- isalpha는 문자열이 영어 혹은 한글일 경우 참을, 그렇지 않을 경우 거짓을 return한다.
- iaslnum은 문자열이 영어, 한글, 혹은 숫자로 되어 있을 때 참을 return한다.

 

+ 회문 검사

def is_palindrome(sentence:str) -> bool:
    strs = []

    for char in sentence:
        if char.isalnum():
            strs.append(char.lower())

    while len(strs) > 1:
        if strs.pop(0) != strs.pop():
            return False

    return True

코테감수성(?)을 좀 길러야 할 것 같다.🙄

 

# Deque

- 앞, 뒤 양쪽 방향에서 element를 추가, 제거할 수 있는 양방향 큐이다.
- Deque는 양 끝 element의 append와 pop이 아주 빠르다. (특히 list에 비해!)

- Deque는 다음과 같이 import해 사용하며, 이러한 method들이 있다.

from collections import deque

deq = deque()

deq.append(item) # 오른쪽 끝 아이템 삽입
deq.appendleft(item) # 왼쪽 끝 아이템 삽입
deq.pop()
deq.popleft()
deq.extend(array)
deq.extendleft(array)
deq.remove(item)
deq.rotate(num) # deque를 num만큼 회전

 

 

# 문자열 슬라이싱

- 빠르게 동작하는 파이썬의 강력한 기능 💪

- 문자열을 조작할 때는 슬라이싱을 우선으로 사용하는 것이 속도 개선에 유리하다!

- 몰랐던 문자열 슬라이싱 방법! ↓

S = '안녕하세요'

s[::-1] == 요세하녕안
s[::2] == 안하요

 

+ 문자열 뒤집기

def reverse_string(s):

    s = [char for char in s]

    print(f'array: {s}')

    left, right = 0, len(s) -1

    while left < right:

        s[left], s[right] = s[right], s[left]

        left += 1
        right -= 1
    
    print(f'result: {s}')

투 포인터 스왑 방식
위와 같이 한 줄에서 스왑을 처리하면 tmp를 통해 값을 저장하지 않아도 된다.

 

그런데 문자열 슬라이싱을 사용하면 더 빠르게 처리할 수 있다.

def reverse_string(s):

    s = [char for char in s]

    print(f'array: {s}')

    s = s[::-1] 
    # s[:] = s[::-1]
    # s.reverse()

    print(f'result: {s}')

 

[질문 노트]

 

 

 

반응형