문자열

text.upper()
text.lower()
text.swapcase()
text.capitalize()
text.title()
r'~~~' # 출력에 특수문자가 많이 있다면 원시 문자열 r을 사용해보자
# print의 옵션들
print(end = "~") # 출력 맨 뒤에 
print(sep = "~") # 구분자
print(file = "~") # 다른 파일이나 스트림에 출력
print(flush = "~") # 
print(f"{a} + {b} = {a+b}") #fstring 혹은 포맷 문자열 이라고 부른다.

리스트

lst.append(n) # 요소 맨 뒤에 추가
lst.extend([list]) # 리스트 연장
lst.insert(idx, item) # idx 위치에 item 추가
lst.remove(item) # 리스트 내에서 item 찾아서 삭제
lst.pop(idx) # 리스트 요소 삭제: idx 지정하지 않을 시 리스트의 마지막 요소를 삭제
lst.clear() # 리스트 초기화
lst.index(item) # 해당 item의 idx 출력 !!못찾으면 에러남 -> try, except문과 함께 사용을 권장
lst.count(item) # 리스트 내 item의 갯수를 출력
lst.sort() # 정렬 nlogn 시간복잡도 Timsort를 사용
lst.reverse() # 요소 뒤집기
lst1 = lst.copy() # lst의 내용을 lst1에 복사함
min(lst) # lst 리스트 내의 최소 값을 반환: 문자열 리스트에서도 사전순으로 최대, 최소를 비교
max(lst) # lst 리스트 내의 최대 값을 반환
len(lst) # 리스트의 길이 반환
sum(lst) # 리스트 총 요소의 합을 반환: 문자열 리스트에서 사용 불가,
lst = list("hello") # ['h','e','l','l','o'] 리스트화 해서 반환해줌
del lst[idx] # idx 위치의 요소를 삭제
lst[s:e] # start idx 부터 end idx 까지 리스트로 반환
lst1 + lst2 # lst1 리스트 뒤에 lst2 리스트를 더함: extend()는 기존 리스트를 수정, +는 새로운 리스트를 생성한다는 차이가 있음
lst*2 # 리스트 반복
list(zip(lst1, lst2)) # lst1과 lst2를 묶어 반환해줌
list1 = reversed(lst1) # lst1을 뒤집은 리스트를 list1에 반환함 원본 리스트는 변화 x
list1 = sorted(lst1) # lst1을 정렬한 리스트를 list1에 반환함, 원본 리스트는 변환 x
print(2 in lst1) # 특정 요소가 lst1에 존재하는지 확인함 True, False로 출력
print(2 not in lst1) # 특정 요소가 lst1에 존재하지 않는지 확인함, True, False로 출력

lst1 = [1, 2]
lst2 = ['a', 'b']
print(list(zip(lst1, lst2)))  # 출력: [(1, 'a'), (2, 'b')]

lst1 = [1, 2, 3]
lst2 = ['a', 'b']
print(list(zip(lst1, lst2)))  # 출력: [(1, 'a'), (2, 'b')]
# 리스트의 길이가 서로 다를 때
lst = [1, 2, 3]
print(list(map(lambda x: x * 2, lst)))  # 출력: [2, 4, 6]
for index, value in enumerate(["a", "b", "c"]):
    print(index, value)
    
0 a
1 b
2 c
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)  # 출력: [0, 2, 4, 6, 8]

# list, lambda, map을 같이 사용하기에 어려운 부분이 있다면 enumerate나 for문을 사용한
# list comprehension을 사용해보자
def solution(todo_list, finished):
    return [work for idx, work in enumerate(todo_list) if not finished[idx]]
    

# list comprehension 사용을 습관화(for문을 사용했을 때와 list comprehension을 사용했을 때의 차이)
def solution(start_num, end_num):
    answer = []
    for i in range(start_num,end_num-1,-1):
        answer.append(i)
    return answer
# 위 함수에 list comprehension을 적용하여 아래와 같이 리스트를 생성할 수 있다.
def solution(start_num, end_num):
    return [i for i in range(start_num, end_num-1,-1)]

# for문을 사용했지만 조건문이 포함되지 않은 list comprehension
def solution(my_string):
    answer = [my_string[i:] for i in range(len(my_string))]
    answer.sort()
    return answer
    
# join을 응용하여 list comprehension의 결과를 문자열로 만들어 반환하는 예
def solution(my_string, index_list):
    answer = ''.join([my_string[i] for i in index_list])
    return answer
    
# list comprehension 사용 시 조건문을 넣어야겠다면 변수 반환부(맨앞)에서 해결하자(for문 이후가 아닌)
def solution(arr, k):
    return [i*k if k%2==1 else i+k for i in arr ]

# 
a = [1, 2, 3]
b = a
print(a is b)  # 출력: True
lst = [3, 1, 2]
lst.sort()  # 오름차순 정렬
print(lst)  # 출력: [1, 2, 3]

lst.sort(reverse=True)  # 내림차순 정렬
print(lst)  # 출력: [3, 2, 1]

lst.sort(key=lambda x: -x)  # 값을 기준으로 정렬 (내림차순)
print(lst)  # 출력: [3, 2, 1]
lst = ['a', 'b', 'c']
result = ', '.join(lst)
print(result)  # 출력: "a, b, c"
s = "i love you"
result = s.split()  # 공백을 기준으로 분리
print(result)  # 출력: ['i', 'love', 'you']

def solution(strArr):
    return [s.lower() if i % 2 == 0 else s.upper() for i, s in enumerate(strArr)]
s = "hello world"
print(s.startswith("hello"))  # 출력: True
print(s.startswith("world"))  # 출력: False

s = "hello world"
print(s.startswith("world", 6))  # 출력: True (6번 인덱스부터 "world"가 시작되므로)

# endswith도 있다
return int(my_string.endswith(is_suffix))
def solution(start, end):
    return list(range(start, end + 1))
x = 10
result = eval("x + 5")  # x + 5를 실행
print(result)  # 출력: 15
filter(function, iterable)

def solution(str_list, ex):
    return ''.join(filter(lambda x: ex not in x, str_list))
    
# filter를 통해 delete_list에 있는 값을 걸러내는 사용 예제이다.
def solution(arr, delete_list):
    answer = list(filter(lambda x: x not in delete_list ,arr))
    return answer
next(iterator, default)

def solution(n_str):
    return n_str[next((i for i,c in enumerate(n_str) if c!='0'),0):]
    
# 아래와 같이 (C++의 a++과 같이) 선언할 때 마다 iterator가 하나씩 전진하는 구조이다.
my_iter = iter([1, 2, 3])
print(next(my_iter))  # 출력: 1
print(next(my_iter))  # 출력: 2
print(next(my_iter))  # 출력: 3
# 아직 이해가 덜 되었다. 더 사용을 해 봐야 할 것 같다.
string.lstrip([chars])

# 공백 제거에 사용
s = "   hello"
print(s.lstrip())  # 출력: "hello"

# 0 제거
s = "000123"
print(s.lstrip('0'))  # 출력: "123"

# 두 가지 문자를 제거
s = "000abc000"
print(s.lstrip('0a'))  # 출력: "bc000"
string.find(substring, start=0, end=len(string))

text = "hello world"
index = text.find("o")
print(index)  # 출력: 4