몫과 거듭제곱
print(10 // 2) # 몫: 5
print(2 ** 3) # 거듭제곱: 8
가감승제 연산자(+, -, *, /)와 나머지 연산자(%)는 Java와 같다.
List 자료형
기본 문법
# 선언 및 초기화
arr = [1, 2, 3, 4]
# 인덱스 접근
print( arr[0] ) # 1 출력
print ( arr[-1] ) # 4출력
# 값 재할당
arr[0] = 10
print( arr[0] ) # 10 출력
arr[0] = 1
# 슬라이싱 list[n:m] n부터 m앞까지
print( arr[0:2] ) # [1, 2]
print( arr[0:-1] ) # [1, 2, 3]
print( arr[1:-1] ) # [2, 3]
# 리스트 초기화
arr.clear()
# 리스트 컴프리헨션
arr = [0] * 3
two_d_list = [[0] * 3 for _ in range(3)]
even_list = [i for i in range(1, 10) if i % 2 == 0]
print(arr) # [0, 0, 0]
print(two_d_list) # [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
print(two_d_list[0][0]) # 0
print(even_list) # [2, 4, 6, 8]
List는 순서가 있는 선형 자료구조이고, Array처럼 인덱스를 사용해서 O(1)로 접근할 수 있다. 음수 인덱스, 슬라이싱, List Comprehension은 생소한 개념이긴 하지만 익혀두면 굉장히 유용할 듯하다.
리스트 CRUD 함수
arr = [1, 2, 3]
# 맨 뒤에 추가
arr.append(4)
print(list) # [1, 2, 3, 4]
# 0번 index에 0삽입
arr.insert(0, 0)
print(arr) # [0, 1, 2, 3, 4]
# 2번 index에 2삽입
arr.insert(2, 2)
print(arr) # [0, 1, 2, 2, 3, 4]
# 값으로 제거
arr.remove(2) # 중복 값은 맨 앞에 값을 찾아서 지운다.
print(arr) # [0, 1, 2, 3, 4]
# 인덱스로 제거
arr.pop(-1)
print(arr) # [0, 1, 2, 3]
# 맨 뒤에 값 꺼내기
arr.pop()
print(arr) # [0, 1, 2]
List 정렬 함수
arr = [15, 32, 17, 12, 19, 47, 35]
# 오름차순 정렬 - 원본 변형
arr.sort()
print(arr) # [12, 15, 17, 19, 32, 35, 47]
# 내림차순 정렬 - 원본 변형
arr.sort(reverse = True)
print(arr) # [47, 35, 32, 19, 17, 15, 12]
# 오름차순 정렬 - 원본 변형X, List 반환
sorted_list = sorted(arr)
print(sorted_list) # [12, 15, 17, 19, 32, 35, 47]
# 내림차순 정렬 - 원본 변형X, Iterator 반환
reversed_list = reversed(arr)
print(reversed_list) # <list_reverseiterator object at 0xa405f8>
print(list(reversed_list)) # [12, 15, 17, 19, 32, 35, 47]
Dictionary 자료형
dict = {}
dict['apple'] = '사과'
dict['banana'] = '바나나'
print(dict['apple']) # 사과
print(dict['banana']) # 바나나
print(dict.keys()) # dict_keys(['apple', 'banana'])
print(dict.values()) # dict_values(['사과', '바나나'])
# for문으로 모든 key 순회
for key in dict.keys():
print(key)
# for문으로 모든 value 순회
for value in dict.values():
print(value)
key, value 쌍으로 이루어진 자료구조이다. Java의 Map과 유사하지만 값을 key를 이용하여 배열처럼 접근할 수 있어서 좀 더 사용하기 편한 것 같다.
Set 자료형
a = set([1, 2, 3, 4])
b = set([4, 5, 6, 7])
print(a) # {1, 2, 3, 4}
print(b) # {4, 5, 6, 7}
# 교집합
print(a & b) # {4}
# 합집합
print(a | b) # {1, 2, 3, 4, 5, 6, 7}
# 차집합
print(a - b) # {1, 2, 3}
print(b - a) # {5, 6, 7}
# 원소 추가
a.add(5)
print(a) # {1, 2, 3, 4, 5}
# 원소 여러 개 추가
b.update([1, 2, 3])
print(b) # {1, 2, 3, 4, 5, 6, 7}
# 원소 삭제
a.remove(5)
print(a) # {1, 2, 3, 4}
# set을 이용하여 list 중복 제거
arr = [3, 3, 7, 7, 2, 2, 1, 1]
unique_numbers = list(set(arr))
print(unique_numbers) # [1, 2, 3, 7]
arr = [1, 1, 2, 2, 7, 7, 3, 3]
unique_numbers = list(set(arr))
print(unique_numbers) # [1, 2, 3, 7]
List는 순서가 중요하지만 Set은 순서가 중요하지 않다. 사실상 Set은 순서가 없다고 봐야 한다. [1, 2]와 [2, 1]은 서로 다른 리스로 간주하지만 Set은 순서가 중요하지 않기 때문에 집합 {1, 2}와 {2, 1}은 같은 Set이다.
그리고 List는 중복된 값이 저장 될 수 있지만 Set은 중복을 허용하지 않는다. 2를 3개 넣는다고 가정하면, List는 [1, 2, 2, 2]가 가능하지만 Set은 무조건 {1, 2}가 된다.
List를 Set으로 변환하여 중복을 제거한 후 다시 List로 변환하면 항상 그런지는 모르겠지만 오름차순으로 반환되는 것 같다. 만약 항상 그렇다고 한다면 List의 중복을 제거하고 오름차순으로 만들고 싶을 때 set()을 이용하면 유용할 듯하다. 그리고 그냥 중복만 제거할 때에도 유용할 것 같다.
in과 not in
# in과 not in
if 1 in [1, 2, 3]:
print("List [1, 2, 3]에 1이 들어있음")
if 1 not in [2, 3]:
print("List [2, 3]에 1이 들어있지 않음")
리스트에 특정 값이 들어있는지, 없는지 체크할 수 있다.
입력
# input()의 반환값은 문자열
# 정수 값 1개 입력
n = int(input())
# 실수 값 1개 입력
n = float(input())
# 문자열 입력
message = input()
# 정수 값 공백을 구분 문자로 한 줄로 여러 개 입력 (Ex: 1 2 3 4)
numbers = list(map(int, input().split()))
내장 함수
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(sum(numbers)) # 55
print(max(numbers)) # 10
print(min(numbers)) # 1
print(max(30, 20, 10, 40)) # 40
print(min(30, 20, 10, 40)) # 10