슬라이스
s[1:4] # 1..3 (끝 미포함)
s[:3] # 앞에서 3
s[-2:] # 뒤에서 2
s[::-1] # 뒤집기
arr[1:-1] # 양끝 제외
음수 인덱스는 끝에서부터입니다. s[-1]은 마지막 문자.
문자열은 불변
# s[0] = 'z' # TypeError
t = 'z' + s[1:]
chars = list(s)
chars[0] = 'z'
t = ''.join(chars)
파싱 패턴
lines = input.strip().splitlines()
nums = list(map(int, lines[0].split()))
n, *rest = nums
split()는 공백·탭을 알아서 나눕니다. split(' ')는 연속 공백에 빈 토큰이 생깁니다.
정렬
arr.sort() # 제자리
sorted(arr) # 새 리스트
arr.sort(key=lambda x: -x) # 내림차순 숫자
arr.sort(key=len) # 길이
튜플 키로 다중 기준: key=lambda x: (x[0], -x[1]).
in · find
'ab' in s
s.find('ab') # 없으면 -1
s.startswith('ab')
리스트 x in arr는 O(n)입니다. 멤버십이 잦으면 set을 쓰세요.
슬라이스 복사
b = a[:] # 얕은 복사
b = a[1:-1]
스택·큐 감각
리스트 끝 append/pop은 O(1)에 가깝습니다.
앞을 pop(0)하면 O(n). 앞 제거가 많으면 collections.deque.
문자열 ↔ 리스트
chars = list(s)
chars[0] = "Z"
s2 = "".join(chars)