본문 바로가기

Python/Python 기초

[Python] 리스트 자료형

1. 리스트 자료형

 - 자바나 C의 배열의 기능을 제공하며 연결리스트와 유사한 기능도 지원

 - 연속적인 데이터가 메모리에 올라가 있을 때 반복적으로 데이터를 이어 붙힐 수 있는 append 함수를 지원

 - 리스트는 대괄호 안에 원소를 넣어 초기화 하며, 쉼표로 원소를 구분한다.

 - 비어있는 리스트를 선언 => list() 또는 []

 - 인덱스는 0 부터 시작한다

 

# 직접 데이터를 넣어 초기화
a = [1,2,3,4,5,6,7,8,9]
print(a)

# 네 번째 원소 출력
print(a[3])

# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)
[1,2,3,4,5,6,7,8,9]
4
[0,0,0,0,0,0,0,0,0,0]

 

* 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱 (Indexing) 이라고 한다

* 인덱스 값은 양의 정수, 음의 정수 모두 가능하다

* 음의 정수를 입력할 경우 원소를 거꾸로 탐색한다.

 

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 여덟 번째 원소만 출력
print(a[7])

# 뒤에서 첫 번째 원소 출력
print(a[-1])

# 뒤에서 세 번째 원소 출력
print(a[-3])

# 네 번째 원소 값 변경
a[3] = 7
print(a)
8
9
7
[1,2,3,7,5,6,7,8,9]

 * 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용

 * 콜론을 이용해서 시작인덱스와 끝 인덱스 설정 가능

 * 끝 인덱스는 실제 인덱스보다 1을 더 크게 설정 ( 관용적 인덱스 처리 방식이다)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 네 번째 원소만 출력
print(a[3])

# 두 번째 원소부터 네 번째 원소까지
print(a[1:4])
4
[2,3,4]

 

2. 리스트 컴프리헨션

# 0부터 9까지의 수를 포함하는 리스트
array = [ i for i in range(10)]
# i 라는 변수가 0부터 9까지 매번 증가하면서 반복 할 때마다 그 i 값을 원소로 설정하여
# 리스트를 만들겠다.

print(array)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

* 추후 python에서의 반복문을 공부 한 후 한번 더 다시 보자

 

# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [ i for i in range(20) if i % 2== 1]
# i가 0부터 19까지 반복하되 그 i 값이 2로 나누었을 때 나머지가 1인 원소만 리스트에 담겠다

print(array)

# 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
array = [i * i for i in range(1, 10)]
# 1부터 9까지 반복을 하되 매번 i * i를 그 원소로 설정할 수 있다.

print(array)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[1, 4, 9, 16, 25, 36, 49, 64, 81]

 

 - 리스트 컴프리헨션과 일반적인 코드를 비교

# 0부터 19 까지의 수에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1]

print(array)

# 0부터 19 까지의 수 중에서 홀수만 포함하는 리스트
array = []
for i in range(20):
	if i % 2 == 1:
    	array.append(i)
        
print(array)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

 * 4줄짜리 코드를 한줄로 작성 할 수 있다.

 * 2차원 리스트를 초기화 할 때 효과적이다.

 * N * M 크기의 2차원 리스트를 한번에 초기화 할 때 유용하다

 * array = [[0] * m for _ in range(n)]

 # n 번 반복을 할 때마다 길이가 m 인 리스트를 초기화 하는 방식 

 

# N * M 크기의 2차원 리스트 초기화
n = 4
m = 3
array = [[0] * m for _ in ragne(n)]
print(array)

# 행이 4 열이 3인 크기의 2차원 리스트
[[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

 

* 잘못된 예시

# N * M 크기의 2차원 리스트 초기화
n = 4
m = 3
array = [[0] * m] * n
print(array)

array[1][1] = 5
print(array) 
# 특정한 위치의 값을 바꾸려 한다
[[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
[[0,5,0],[0,5,0],[0,5,0],[0,5,0]]

 * 이러한 방식으로 2차원방식을 초기화 하면 내부 리스트가 모두 같은 객체로 인식될 수 있음

 

- 언더바는 언제 사용할까?

- 반복을 수행ㄹ하되 반복을 위한 변수의 값을 무시하고자 할때 언더바를 사용

# 1부터 9까지의 자연수를 더하기
summary = 0
for i in range(1, 10):
	summary += i
print(summary)
# 이 경우 1부터 9까지의 자연수, 즉 각각의 i 값이 summary에 더해져야 하므로 for i 선언

# "Hello World"를 5번 출력하기

for _ in range(5):
	print("Hello World")
    
# 내부적으로 어떠한 변수값이 사용되지 않고 어떠한 작업을 반복하고자 한다면 i 같은 변수 사용안해도 됨

 

* 리스트 관련 기타 메서드

a = [4, 3, 2, 1]

# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기 : ", a)

# 특정 인덱스에 데이터 추가
a.insert(2,3)
print("인덱스 2에 3추가 " ,a)

# 특정 값인 데이터 개수 세기
print("값이 3인 데이터 개수: ". a.count(3))

# 특정 값 데이터 삭제
a.remove(1)
print("값이 1인 데이터 삭제: ", a)
원소 뒤집기 : [1, 2, 3, 4]
인덱스 2에 3 추가: [1, 2, 3, 3, 4]
값이 3인 데이터 개수: 2
값이 1인 데이터 삭제: [2, 3, 3, 4]

 

 * 리스트에서 특정 값을 가지는 원소를 모두 제거하기

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3,5} # 집합 자료형

# remove_list에 포함되지 않은 값만 저장
result = [i for i in a if i not in remove_set]
# a라는 리스트를 i라는 변수가 하나씩 확인을 하면서 i변수가 remove_set에 포함되지 않다면
# 그 값만 리스트에 남겨두겠다.

print(result)
[1, 2, 4]

'Python > Python 기초' 카테고리의 다른 글

[Python] 기본 입출력  (0) 2021.06.02
[Python] 사전 자료형  (0) 2021.06.02
[Python] 문자열 자료형  (0) 2021.06.02
[Python] 수 자료형의 연산  (0) 2021.05.27
[Python] 자료형  (0) 2021.05.27