파이썬으로 알고리즘 풀기 -자료형1편(list)!

원종식·2022년 6월 30일
0
post-custom-banner

자료형

알고리즘을 풀다보면 자주 쓰게되는 자료형이 있다. 기본적으로 정수형 실수형의 숫자들이 있고 문자열의 string그리고 list, set, dictionary등등 꽤 다양한 것들을 각자의 용도에 맞게 사용하게 된다. 이 글에서는 그런 자료형들의 사용법을 알아보고 정리하고자 한다.

List

먼저 가장 자주 쓰게 되는 자료형인 list이다. 변수들의 나열이라고 생각하면 된다. 그리고 그 나열에는 순서가 있어서 그 순서를 통해서 접근이 가능한 것들이라고 보면 된다.

선언방법

선언방법은 크게 2개이다

n1=[1,"2","34",567,True]
n2=list()

이때 list에 iterable 넣으면 재미있는 선언 방식을 사용 할 수 있다.

n=list( x for x in range(10))
print(n)


이 방법은 알고리즘에서 입력 받을때 매우 자주 사용하게 된다.
Ex:

n=list( int(x) for x in input().split(' '))
print(n)

삽입

데이터를 추가하는 방법은 4가지가 있다.
append(값) : 이미 선언되어 있는 list 뒤에 값을 추가한다
insert(인덱스,값) : 인덱스 위치에 값 추가
extend(iterable) : list 뒤에 iterable 인자 추가
copy() : 다른 리스트를 카피해서 넣을 수 있다
실례는 다음과 같다

n=[2,3,4]
n.append(5)
print(n)
n.insert(0,1)
print(n)
n.extend(range(6,8))
print(n)
n2=n.copy()
print(f"n2 는{n2}")

삭제

삭제는 3개의 방법이 있다.
pop() , pop(index) : 인덱스를 줄 경우 인덱스 값을 제거하고 안 줄 경우 마지막 변수를 제거한다
remove(값) : list안에 값을 제거한다. 값이 여러개일 경우 맨 앞의 값을 제거한다
clear() : list을 초기화 한다(빈 list로 만듬)

n=[1,1,4,2,3,4,5]
n.pop()
print(n)
n.pop(0)
print(n)
n.remove(4)
print(n)
n.clear()
print(n)

인덱싱

파이썬에서 제공하는 매우 매우 유용한 기능으로 list를 마음대로 범위를 지정해서 사용 할 수 있는 강력한 기능이다
n[인덱스 시작값: 인덱스 종료값+1] 의 형식으로 사용할 수 있으며
: 좌우로 값을 안 줄 경우 좌측의 경우 0부터 우측의 경우 끝가지를 나타낸다

n=[0,1,2,3,4,5]
print(n[1:4])
print(n[:4])
print(n[1:])

n[:]의 경우 list전체를 나타낸다.
python의 경우 n이 리스트 일때
n2=n 과 같이 n2에 n을 복사하면 주소가 복사되어 n2의 값으 바꾸면 n의 값도 바뀌게 된다.

n=[1,2,3,4,5]
n2=n
n2[1]=0
print(n)


하지만 이때 [:]을 활용 할 경우 값만 복사가 된다

n=[1,2,3,4,5]
n2=n[:]
n2[1]=0
print(n)


list카피의 경우 본인은 자주 실수하면서 익히게 되었다. 혹시 모르고 코드를 짤 경우 맞는 알고리즘도 아주 이상하게 꼬이니 copy 관련 이슈는 추후에 deepcopy와 함께 또 다뤄보도록 하자.
또한 리스트에서 음수를 활용해서 인덱스를 줄 수도 있다
인덱스 -1은 맨 뒤의 값을 -2의 값은 맨 뒤에서 2번째 값을 주게 된다.

n=[1,2,3,4,5,6]
print(n[-1],n[-3])


인덱싱은 정말 다양하게 알고리즘 문제를 풀면서 활용하게 된다. 자주 사용해보면서 필요한 곳에 잘 활용해보자.

정렬

list는 순서가 있는 변수들의 모임이다. 그렇기 때문에 정렬을 할 수 있다.
정렬은 sort() 또는 sorted()를 활용한다. 이때 reverse='True'를 통해 내림차순 정렬도 가능하다.
sort()의 경우 해당 list를 정렬하고 sorted()의 경우 정렬된 값을 리턴한다. 그러므로 sorted()의 경우 해당 값을 받을 변수가 필요하다.

n=[1,3,2,5,4,7]
n.sort()
print(n)
t=sorted(n,reverse=True)
print(t)


정렬은 추후 lambda를 다루면서 더 자세히 다룰 수 있도록 하겠다. 해당 sort의 경우 시간복잡도는 nlog(n)으로 계산하면 된다.

profile
여행을 좋아하고 술을 좋아하는 주행가 종시기의 개발 공간
post-custom-banner

0개의 댓글