본문 바로가기

파이썬

파이썬 자료형(2) - 리스트

728x90

1. 정의

데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형.

 

2. 특징

1) C나 자바에서 배열뿐 아니라 연결 리스트의 기능 지원한다. C++ vector 기능과 유사.
2) 리스트는 대괄호([]) 안에 원소를 넣어 초기화 해, 쉼표로 원소를 구분한다.
3) 리스트의 원소 접근 시, 인덱스 값을 괄호에 넣는다. 
4) 인덱스는 0부터 시작.
5) 비어 있는 리스트를 선언하고자 할 때는 list() 혹은 []를 이용.

 

ex) a=[1,2,3,4,5,6,7,8]
print(a) => [1,2,3,4,5,6,7,8]

 

3. 인덱싱

리스트의 특정 원소에 접근하는 것을 인덱싱이라고 한다. 만약 인덱스가 -면은 맨 뒤에서부터 접근한다.
ex)  a=[1,2,3,4,5,6,7,8]  a[-1]=8

 

4. 슬라이싱

리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때 슬라이싱을 이용한다. 대괄호 안에 클론(:)을 넣어서 시작 인덱스와 끝 인덱스를 설정할 수 있다.
ex) a=[3,5,4,3,2] 
a[1:5] => [5,4,3,2]    #원소 2번째부터 5번째까지.

 

5. 초기화

대괄호 안에 조건문과 반복문 적용해 리스트 초기화.


ex1) 0~9까지의 수를 포함하는 리스트

array=[i for i in range(10)] 
->[0,1,2,3,4,5,6,7,8,9]

ex2) 0부터 19까지의 수 중에서 홀수만 포함하는 리스트

array=[i for i in range(20) if i%2 ==1] 
->[1,3,5,7,9,11,13,15,17,19]

ex3) 1부터 9까지의 수들의 제곱 값을 포함하는 리스트

array=[i*i for i in range(1,10)] 

 

6. 컴프리헨션

2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다. N X M 크기 2차원 리스트를 한 번에 초기화 할 때 매우 유용.
ex) array = [[0] * m for_ in range(n)]

 

그러나, array=[[0]*m]*n은 예기치 않은 결과가 나올 수 있다. 리스트 안에 포함된 리스트가 모두 같은 객체로 인식된다.

 

1) 좋은 예시 
n = 4
m = 3
array[[0]*m for_in range(n)]

출처: 이것이 코딩테스트다/ 나동빈 책


2) 잘못된 예시
n = 4
m = 3
array = [[0] * m ] * n

 

array[1][1] = 5를 했을 때, 결과 값이 아래와 같은 사진이 나온다.

출처: 이것이 코딩테스트다/ 나동빈 책

1개를 고칠려 했지만, 4개의 리스트가 전부 다 초기화. 의도치 못한 결과가 나온다.

 

※ 참고

array[[0]*m for_in range(n)]에서 _를 쓰는 이유: i 대신 _을 쓰면 간단하게 출력(반복)만 한다. 내부적으로 변수가 사용되지 않을 때는 보통 _를 쓴다.(i를 써도 상관없긴 하다.)

 

 

7. 기타 메서드

출처: 이것이 코딩테스트다/ 나동빈 책

 

위 사진에 언급되지 않은 sorted의 경우 복제된 값을 반환한다. 즉, 내부 값이 바뀌지 않는다. 정리하면 sort는 메서드로 보면 되고, sorted는 내장함수라 보면 된다.

 

아래 사진은 예시.

 

8. 특정 값 원소 모두 제거.

remove_set 사용.

 

ex)

a= [1,2,3,4,5,5,5]
remove_set = {3,5}

result = [i for i in a if i not in remove_set]
print(result) => [1,2,4]

728x90

'파이썬' 카테고리의 다른 글

파이썬 자료형(3) - 문자열&튜플&사전&집합  (0) 2021.04.14
파이썬 자료형(1)  (0) 2021.04.14