본문 바로가기
Python

Python - 기초 자료형(리스트)

by DGK 2021. 10. 13.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

기초 자료형(리스트)

 

  • 기본 개념
리스트 자료형은 순서가 있고 중복이 가능하며, 수정 및 삭제를 할 수 있는 유일한 자료형이다.
또한, 리스트 자료형은 데이터를 담는 컨테이너 역할을 하기 때문에 타 언어의 배열과 유사하다.

# 선언 방식

a = [] 			
b = list()		

# 빈 리스트를 선언하는 방식이다.


print(type(a))
print(type(b))

# 두 결과 모두 #<class 'list'>이므로, a와 b의 타입은 리스트이다.


c = [70, 75, 80, 85]
print(len(c))   

# 결과 : 4
# 리스트는 인덱스 번호가 존재하며, 리스트의 인덱스 번호는 0부터 시작한다.
# 리스트는 시퀀스형이므로, len( )함수와 슬라이싱과 같은 기능들을 사용할 수 있다.


d = [1000.1, 10000, 'Ace', 'Base']
e = [1000, 10000, ['Ace', 'Base', 'Color']]  
f = [21.42, 'foobar', 3, 4, False, 3.14535]  

# 이처럼 리스트안에는 다양한 자료형을 함께 담을 수 있다.

 

 

  • 응용 개념
# 인덱싱(리스트의 인덱스 번호를 활용하여, 원하는 데이터를 가져오는 기능)

a = []
b = list()
c = [70, 75, 80, 85]
d = [1000.1, 10000, 'Ace', 'Base']
e = [1000, 10000, ['Ace', 'Base', 'Color']]
f = [21.42, 'foobar', 3, 4, False, 3.14535]


print('d - ', type(d), d)

# 결과 : d -  <class 'list'> [1000.1, 10000, 'Ace', 'Base']


print('d - ', d[1])

# 결과 : d - 10000
# 리스트의 인덱스 번호가 1인 데이터를 가져오라는 의미이다.


print('d - ', d[0] + d[1] + d[1])

# 결과 : d -  21000.1
# 리스트의 데이터는 연산이 가능하며, 정수형과 실수형이 연산되는 과정에서
# 자동으로 실수형으로 형 변환을 하여 결과 값을 출력한다.


print('d - ', d[-1])

# 결과 : d -  Base
# 리스트의 인덱스 번호가 음수이면, 리스트의 맨 마지막 데이터가 -1의 인덱스 번호를 가지며
# 뒤에서 부터 앞으로 오면서 -1, -2, -3...의 인덱스 번호가 부여된다.


print('e - ', e[-1][1])

# 결과 : e -  Base
# 리스트 e에서 인덱스 번호가 -1인 데이터는 ['Ace', 'Base']이고,
# 해당 리스트 ['Ace', 'Base']에서의 인덱스 번호가 1인 데이터는 Base이므로,
# e[-1][1]의 결과 값은 Base가 된다.(중첩된 리스트에 접근하는 방식)




# 중첩된 리스트 관련 참고 예시

print('e - ', type(e[-1][1]))

# 결과 : e -  <class 'str'>
# 결과 값은 위와 동일하게 Base이므로, 해당 데이터의 타입은 문자형이다.


print('e - ', list(e[-1][1]))

# 결과 : e -  ['B', 'a', 's', 'e']
# 결과 값이 문자형인 데이터를 리스트로 형 변환 시킬 수 있다.




# 리스트 자료형의 슬라이싱 예시

print('d - ', d[0:3])

# 결과 : d -  [1000.1, 10000, 'Ace']
# 리스트의 인덱스 번호가 0인 데이터부터 인덱스 번호가 3인 데이터의
# 바로 앞 데이터(인덱스 번호가 2인 데이터)까지 가져오라는 의미이다.


print('d - ', d[2:])

# 결과 : d -  ['Ace', 'Base']


print('e - ', e[-1][1:3])

# 결과 : e -  ['Base', 'Color']
# 중첩 리스트에서 슬라이싱을 하는 방법이다.




# 리스트 연산(+ , *) 예시

print('c + d', c + d)

# 결과 : c + d [70, 75, 80, 85, 1000.1, 10000, 'Ace', 'Base']
# 두 개의 리스트를 더하면, 첫 번째 리스트의 마지막 부분에 
# 두 번째 리스트의 데이터가 삽입된다.
# 즉, 두 리스트의 합은 두 리스트를 합치는 것을 의미한다.


print('c * 3', c * 3)

# 결과 : c * 3 [70, 75, 80, 85, 70, 75, 80, 85, 70, 75, 80, 85]
# 리스트에 특정 숫자를 곱하면 해당 리스트의 순서는 유지하면서,
# 리스트의 데이터를 숫자의 횟수만큼 반복한다. 


print("'Test' + c[0]", 'Test' + str(c[0]))

# 결과 : 'Test' + c[0] Test70
# 문자열과 숫자형의 연산은 에러를 발생시키기 때문에,
# c[0]의 결과 값인 숫자형을 문자형으로 형 변환 시킨 후에 연산을 해야한다.




# 리스트 값 비교 예시

print(c == c[:3] + c[3:])

# 결과 : True


print(c)
print(c[:3] + c[3:])

# 두 결과 모두 [70, 75, 80, 85]로 동일하다.




# identity(id) 관련 참고 예시

temp = c 
print(temp, c)
print(id(temp))  # 결과 : 4469585920
print(id(c))     # 결과 : 4469585920 

# 위의 결과 처럼 리스트 c와 변수 temp가 동일한 id 값을 가지는 이유는
# 리스트 c와 변수 temp가 동일한 자료형을 가지고 있기 때문이다.
# 즉, 파이썬이 내부적으로 동작의 효율성을 고려하여 같은 id값을 공유하는 것이다.




# 리스트의 수정 및 삭제 예시

c[0] = 4  
print('c - ', c)

# 결과 : c -  [4, 75, 80, 85]
# 리스트 c의 인덱스 번호가 0인 데이터를 4로 수정한 것이다.


c[1:2] = ['a', 'b', 'c']
print('c - ', c)

# 결과 : c -  [4, 'a', 'b', 'c', 80, 85]
# 리스트의 데이터를 수정하는 경우에, 만약 새롭게 변경하려는 데이터가
# 리스트 형태일지라도 수정된 결과 값은 리스트 형태가 아닌 일반 문자열 형태로 수정된다.


c[1:2] = [['a', 'b', 'c']]
print('c - ', c)

# 결과 : c -  [4, ['a', 'b', 'c'], 'b', 'c', 80, 85]
# 만약 새롭게 변경하려는 데이터를 리스트 형태로 넣고자 한다면
# 리스트를 []로 감싼 형태로 데이터를 수정해야 한다.(위의 결과 값과 비교)


c[1:2] = ['a', 'b', 'c']
print('c - ', c)

# 결과 : c -  [4, 'a', 'b', 'c', 80, 85]


c[1] = ['a', 'b', 'c']
print('c - ', c)

# 결과 : c -  [4, ['a', 'b', 'c'], 'b', 'c', 'b', 'c', 80, 85]

# 정리하자면, 슬라이싱 기능으로 인덱스 번호의 범위를 정하여 데이터를 수정하는 경우에는
# 해당 데이터가 문자형으로 수정되지만, 일반적인 방법대로 인덱스 번호만 부여해서 
# 데이터를 수정하려는 경우에는 해당 데이터가 자신의 자료형을 유지하면서 데이터가 수정된다.


c[1:3] = []
print('c - ', c)

# 결과 : c -  [4, 'c', 'b', 'c', 80, 85]
# 슬라이싱 기능으로 인덱스 번호의 범위를 정하여 빈 리스트로 수정하는 경우에는
# 해당 인덱스 범위에 있는 데이터가 삭제된다.


del c[2]
print('c - ', c)

# 결과 : c -  [4, 'c', 'c', 80, 85]
# 예약어 del을 사용하여, 리스트의 데이터를 삭제할 수도 있다.




# 리스트의 함수 활용 예시

a = [5, 2, 3, 1, 4]


print('a - ', a)

# 결과 : a -  [5, 2, 3, 1, 4]


a.append(10)
print('a - ', a)

# 결과 : a -  [5, 2, 3, 1, 4, 10]
# 리스트의 마지막 부분에 데이터를 추가할 때, append( ) 함수를 사용한다.


a.sort()
print('a - ', a)

# 결과 : a -  [1, 2, 3, 4, 5, 10]
# 리스트의 데이터를 오름차순으로 정렬할 때, sort( ) 함수를 사용한다.


a.reverse()
print('a - ', a)

# 결과 : a -  [10, 5, 4, 3, 2, 1]
# 리스트에 들어있는 데이터의 순서를 역으로 바꿀 때, reverse( ) 함수를 사용한다.


print('a - ', a.index(3))

# 결과 : a -  3
# 리스트의 인덱스 번호가 n인 데이터를 가져올 때, index( ) 함수를 사용한다.


print('a - ', a[3])

# 결과 : a -  3 (index( ) 함수와 동일한 기능)


a.insert(2, 7)
print('a - ', a)

# 결과 : a -  [10, 5, 7, 4, 3, 2, 1]
# 리스트안에서 원하는 위치에 특정 데이터를 삽입하고자 할 때, insert( ) 함수를 사용한다.
# insert( ) 함수의 첫 번째 인자는 인덱스 번호(삽입하고자 하는 위치)를 의미하고,
# 두 번째 인자는 삽입하고자 하는 데이터 값을 의미한다.


a.remove(10)
print('a - ', a)

# 결과 : a -  [5, 7, 4, 3, 2, 1]
# 리스트에서 특정 데이터를 삭제하고자 할 때, remove( ) 함수를 사용한다.
# 리스트의 인덱스 번호를 알지 못해도, 지우고자 하는 데이터 값만 알면 
# 손쉽게 데이터를 삭제할 수 있다.(del 예약어와 비교)


print('a - ', a.pop())

# 결과 : a -  1
# pop( ) 함수를 사용하면 기존 리스트에서 마지막 데이터 값을 가져오는 동시에,
# 해당 리스트에서는 가져오는 데이터를 삭제한다.


print('a - ', a)

# 결과 : a -  [5, 7, 4, 3, 2]


print('a - ', a.count(4))

# 결과 : a -  1
# 리스트에서 특정 데이터가 몇 개 존재하는지를 카운트 할 때, count( ) 함수를 사용한다.
# 만약 특정 데이터가 리스트에 없는 경우에는, 결과 값으로 0을 출력한다.


ex = [8, 9]
a.extend(ex)
print('a -', a)

# 결과 : a - [5, 7, 4, 3, 2, 8, 9]
# 리스트의 맨 마지막 부분에 특정 데이터(혹은 리스트)를 삽입할 경우, 
# extend( ) 함수를 사용한다.

'Python' 카테고리의 다른 글

Python - 기초 자료형(딕셔너리)  (0) 2021.10.13
Python - 기초 자료형(튜플)  (0) 2021.10.13
Python - 기초 자료형(문자형)  (0) 2021.10.13
Python - 기초 자료형(숫자형)  (0) 2021.10.11
Python - 변수  (0) 2021.10.11

댓글