본문 바로가기

Python 기초

파이썬 기초(4)-컬렉션 타입과 리스트(List) 자료형

*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*

1. 컬렉션

파이썬에서 컬렉션은 여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미합니다. 파이썬에는 다른 언어들처럼 배열이라는 참조 타입이 존재하지 않는 대신, 컬렉션 데이터 타입이 있습니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줍니다. 파이썬에서는 리스트(List), 튜플(Tuple), 집합(Set), 딕셔너리(Dictionary) 등이 기본적인 컬렉션 타입에 속합니다.

리스트(List)자료구조

컬렉션 자료형의 종류는 다음과 같으며, 오늘은 리스트만 알아보겠습니다.

  • 리스트(List)
  • 튜플(Tuple)
  • 집합(Set)
  • 딕셔너리(Dictionary)

2. 리스트

여러 값을 하나의 변수에 저장하고 관리할 수 있게 하는 순차적인 자료구조입니다. 흔히 사용하는 리스트 용어와 동일한 뜻을 가지고 있으며, 가변적(mutable)입니다. 따라서 여러 데이터 자료를 변용시킬 때 많이 사용합니다. 입력 순서가 유지되며, 내부적으로 동적 배열로 구현되어 있습니다.

2-1. 리스트 기본구조

리스트는 [] 대괄호를 사용합니다.

#리스트 기본구조
#리스트 자료형은 []대괄호 사용
a=[1,2,3,4,5]
print(a)
#타입확인
print(type(a))

2-2. list()함수

list()함수를 통해 자료구조를 list 자료형으로 바꿉니다.

#list()함수
a1=list([1,2,3,4])
print(a1)
print(type(a1))

리스트 자료형 안의 자료값은 int형,float형,str형,bool형 가능합니다.

#리스트 자료형
a=[1,20.5,'문자열',True]
print(a)
print(type(a))
print(type(a[2]))
print(type(a[3]))

리스트 자료안의 값을 인덱스 + 인덱스 연산이 가능합니다.

#인덱스+인덱스
a1=list([1,2,3,4])
print(a1[0]+a1[2])

리스트 자료안에 리스트를 넣는 것 가능합니다.

#인덱싱 안의 인덱싱
a=[1,2,[354,654,23]]
print(a)
print(a[2])
print(a[2][1])

리스트 자료형 안의 자료값을 바꿀 수 있습니다.

#리스트 자료값 바꾸기
a=[1,2,3,4,5]
print(a)
a[0] = 315
print(a)

2-3. 리스트 인덱싱(Indexing)과 슬라이싱(Slicing)

리스트 자료형은 인덱스와 슬라이싱을 통해서 특정 자료값을 추출할 수 있습니다. 다만 인덱싱과 슬라이싱에 차이점이 존재합니다.

  • 리스트 인덱싱: 리스트를 인덱싱하면 []리스트 자료형이 아닌, -1차원해서 메모리값만 추출한다.
  • 리스트 슬라이싱: 차원 다운없이, 리스트 자료형 그대로 추출
#리스트 인덱싱과 슬라이싱
a=[3,2,5,4,[34,52,31]]
print(a[1])
print(a[1:2])

첫번째 자릿수인 숫자 2가 인덱싱의 경우 2, 슬라이싱의 경우 [2]로 추출

#리스트 인덱싱과 슬라이싱
a=[3,2,5,4,[34,52,31]]
print(a[4])
print(a[4:5])

리스트안의 자료형 리스트도 인덱싱의 경우 -1차원, 슬라이싱의 경우 리스트 자료형 그대로 추출

슬라이싱을 이용하여 요소를 바꿀 경우, 리스트에 데이터만 포함합니다.

#슬라이싱으로 리스트 요소 바꿈
a=[3,2,4,5]
print(a)
a[1:2] = [3,2,1]
print(a)

빈 리스트를 저장할 경우 해당 자리의 요소는 삭제됩니다. 슬라이싱을 이용해, 리스트 자릿값을 삭제합니다.

#리스트 요소 제거
a=[1,2,3,4]
print(a)
a[2:3]=[]
print(a)

앞서 배운 del문을 이용해 제거 가능합니다.

# del문을 이용해 삭제
a=[1,2,3,4,5]
print(a)
del a[0:3]
print(a)

2-4. 리스트 연산

리스트끼리 결합가능합니다. 연산자에는 우선순위가 존재하기에, 결합할때는 왼쪽에서 오른쪽 순으로 결과값이 출력됩니다.

#리스트 결합
a=[1,2,3,4,5]
b=[6,7,8,9,10]
print(a+b)
print(b+a)

#+=기호는 변수=변수+리스트 자료형과 같은 표현입니다.
a=[10,20]
a=a+[30,40]
print(a)
a+=[30,40]
print(a)

*연산자로 리스트 자료형을 반복할 수 있습니다.

#리스트 반복
a=[1,2]
print(a*6)

리스트 자료형 안에서 다른 자료형끼리 결합은 발생하지 않습니다.

#결합오류
a=[1,2,'🍕']
print(a[1]+ a[2])

Len()함수를 이용해서 리스트 자료형 값의 갯수를 확인합니다.

#len()함수 이용
a=[1,2,3,4,5,6,7]
print(len(a))

3. 리스트(List) 자료형 메서드(Method)

리스트에서 사용할 수 있는 메서드는 다음과 같습니다.

  • Append() : 추가한다는 뜻으로, 새 요소값 추가
  • Extend() : 확장한다는 뜻으로, 새 요소값들 확장
  • Pop() : 터지다라는 뜻으로, 마지막 요소값을 반환
  • Insert() : 어떤 것을 끼워넣는다는 뜻으로, 특정 위치에 요소값을 추가
  • Index() : 색인이라는 뜻으로, 특정 요소값의 위치 찾기
  • Reverse() : 반대라는 뜻으로, 현재 정렬에서 반대 정렬로 바꾸기
  • Sort() : 정리하다라는 뜻으로, 기본값은 오름차순, reverse=True는 내림차순

함수

  • sorted() : 정리하다라는 뜻으로, sort()와 역할 동일
  • count() : 리스트에서 특정 요소값의 빈도수(사용갯수)를 알려줌

3-1. Append() 메서드

리스트에 사용되며, 리스트의 끝에 새로운 요소를 추가합니다. 추가하는 요소는 값, 리스트 자료형 상관없습니다.

#append()메서드
b=[1,2,3,4,5]
print(b)
b.append(6)
b.append([1,2,3])

3-2. Extend() 메서드

리스트에 여러 요소를 추가합니다. 단, 리스트 형태로 추가합니다.

#extend()메서드
b=[1,2,3,4,5]
b.extend('a')
print(b)
b.extend(['a','b','c'])
print(b)

3-3. Pop() 메서드

리스트 마지막 요소를 삭제하고, 삭제된 요소를 반환합니다. 이때, 반환된 요소는 없어지는 것이 아닌, 해당 변수로 이동한 것입니다.

#pop()메서드
a=[10,20,30]
print(a)
b=a.pop()
print(a) #맨끝 요소 삭제
print(b) #삭제된 요소 반환

3-4. Insert() 메서드

리스트의 특정 인덱스에 요소를 1개만 추가합니다.

#inser() 메서드
a=[1,2,3,4,5]
a.insert(2,3245) # [2]자리에 3245 추가
print(a)

3-5. Index() 메서드

리스트에서 특정 값의 인덱스 위치를 찾습니다.

#index() 메서드
a=[3,2,4,5]
print(a.index(5))

3-6. reverse() 메서드

리스트의 요소들의 순서를 반대로 변경합니다. 순서만 뒤집을 뿐입니다.

#reverse() 메서드
a=[1,2,3,4,5,6,7,8,9,10]
a.reverse()
print(a)

슬라이싱을 통해서 리스트 순서를 뒤집을 수 있습니다. 슬라이싱 구조는 [start:stop:step] 형태로 이루어졌는데, start를 -1로, stop을 0으로 거꾸로 뒤집을 수 있습니다. step을 -1로 함으로써 뒤에서 앞으로 가는 방식으로 자료를 읽습니다.

#리스트 슬라이싱 뒤집기
a=[1,2,3,4,5,6,7,8,9]
print(a[::-1])

3-7. sort() 메서드

리스트의 요소 값들을 정렬합니다. 기본적으로 오름차순 형태이며, reverse=True를 통해 내림차순으로 정렬할 수 있습니다.

#sort() 메서드
#오름차순
a=[1,2,3,4,5,6,7,8,9]
a.sort()
print(a)
#내림차순
a.sort(reverse=True)
print(a)

영어의 오름차순 아스키 코드순으로, 한글은 유니코드 순으로 정렬합니다.

#영어 오름차순
a=['Hush', 'hush','basic','junior']
a.sort()
print(a)
#한글 오름차순
b=['커피','우유','스타벅스','바나프레소']
b.sort()
print(b)

3-8. sorted() 함수와 sort() 메서드 차이점

sorted() 함수는 모든 요소를 정렬한 후, 반환해 주는 함수입니다.

#sorted()함수
#오름차순
a=[1028,256,128,64,32]
print(sorted(a))
#내림차순
print(sorted(a,reverse=True))

 그러나 sort() 메서드는 아스키코드, 유니코드 기반으로 정렬합니다.

3-9. count() 함수

리스트에서 특정 요소의 갯수를 반환하는 함수입니다. 리스트 내에 없는 원소는 0을 나타냅니다.

#count()함수
a=[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
print(a.count(3))
print(a.count(5))