IT/Python

[Python] 코딩테스트에서 알아놓으면 유용한 파이썬 문법

땅일단 2023. 8. 31. 23:26

※ 파이썬 복습 겸 필자가 몰랐던 것 위주로 정리

 

람다 함수

(lambda x, y: x + y)(1,2)    # 3

(lambda li: li[1])([1,2,3])    # 2

 

 

리스트 관련

elements = ["a", "b", "c"]


# 리스트 요소의 인덱스
elements.index("요소명")


# 리스트에 요소 추가
elements.append("요소")


# 리스트 맨 마지막 인덱스인 요소 추출
elements.pop(-1)

# 리스트 값으로 삭제
element.remove("a")


# set 자료형(중복이 제거된 자료형)으로 변환
set(elements)    # {'a', 'b', 'c'}


# 리스트에 0 채우기
zeros = [0 for i in range(3)]    # [0, 0, 0]


# 2차원 배열에 0 채울 때 유의점
zeros1 = [[0] * 3] * 3
zeros2 = [[0] * 3 for _ in range(3)]

zeros1[0][1] = 1
print(zeros1) # [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
zeros2[0][1] = 1
print(zeros1) # [[0, 1, 0], [0, 0, 0], [0, 0, 0]]


# 리스트 깊은 복사
new_elements = elements[:]


# 리스트 슬라이싱 [start:end:step]
new_elements = elements[0:1:1]    # ['a']

 

리스트 요소의 인덱스까지 접근할 수 있는 enumerate() 함수

for idx, element in enumerate(elements):
	print(idx, element)

 

리스트의 모든 요소에 함수를 처리하는 map() 함수

elements = [1.1, 2.1, 3.1]

print(list(map(int, elements)))    # [1, 2, 3]

def plus_one(n):
    return n + 1

print(list(map(plus_one, elements)))    # [2.1, 3.1, 4.1]

 

리스트를 정렬하는 sort() 함수

리스트 자체를 정렬하는 함수로, 리스트.sort() 의 형태로 사용한다.

정렬된 리스트를 새로 반환하고 싶다면 sorted(리스트) 를 사용한다.

elements = [[1, 4], [2, 3], [3, 5], [4, 6], [5, 7]]

# x[1]을 기준으로 오름차순으로 정렬, x[1]이 같다면 x[0]을 기준으로 하여 정렬
elements.sort(key=lambda x : (x[1], x[0]))    # [[2, 3], [1, 4], [3, 5], [4, 6], [5, 7]]

 

pop()을 사용할 때 리스트보다 내부 연산에서 효율적인 deque 자료구조(결과는 같음)

pop(0)을 했을 때 인덱스가 전부 밀리는 list와 달리 deque의 popleft(0)는 가리키는 포인터만 바뀌므로 효율적.

from collections import deque

elements = deque(elements)
elements.popleft()    # elements.pop(0) 과 같은 결과.

 

 

딕셔너리 관련 함수

# 딕셔너리 기본적인 형태
student = {"name": "kim", "grade": "A"}

# 딕셔너리 요소 조회
student.get("name", 0)    # name이라는 key가 있으면 "kim", 없으면 0
student["name"]    # name이라는 key가 있으면 "kim", 없으면 오류


# 딕셔너리에 요소 추가
student["age"] = 17


# 딕셔너리 요소 삭제
del student["grade"]


# 딕셔너리 key를 모은 리스트 생성
list(student.keys())    # value의 경우는 student.values()


# 딕셔너리 모든 요소 초기화
student.clear()


# 딕셔너리에 0 채우기
names = ["kim", "lee", "park"]
dic = {i: 0 for i in names}

 

 

판별 함수

a = "1234"
b = "3²"
c = "½"

 

a.isdecimal()     -> True, isdecimal은 a만 True

isdigit()    -> a, b는 True. (숫자 형태로 된 것들은 True)

isnumeric()    -> a, b, c 모두 True

 

 

반복문 관련

파이썬에선 for, while 같은 반복문에도 else를 쓸 수 있다.

break로 도중에 중단되지 않고 정상적으로 끝까지 루프가 종료됐다면 else를 탐.

for e in elements:
    if e == 3:
        break;
else:
    print("elements라는 리스트 안에 3은 없습니다")

 

 

아스키 코드

print(chr(65))    // 'A'
print(ord("A"))    // 65