5-1. 리스트 자료형

박성혜·2023년 3월 24일

[Python] 1. 왕초보

목록 보기
9/20
post-thumbnail

구글 코랩이나 주피터 노트북에서 직접 작성하며 풀어보세요.


리스트는 여러 데이터를 보관하는 자료형이다.
아래처럼 대괄호로 표현한다.

a = []
b = [1, 2, 3]
c = ['life', 'is', 'too', 'short']
d = [1, 2, 'life', 'is']
e = [1, 2, ['life', 'is']]

여러 개를 써서 다차원 리스트를 만들 수도 있다.
아래는 2차원 리스트다.
a = [[1,2], [3,4], [5,6]]

1. 리스트로 변환하기

다른 자료형을 리스트 자료형으로 변환하려면 list함수를 사용한다.

a = 'Python'
list(a)

[P, y, t, h, o, n]

[Python]으로 나오지 않고 [P, y, t, h, o, n]으로 나오는 것을 알아야 한다.

2. 리스트 인덱싱

문자열 인덱싱과 같다.

a = [1, 2, 3]
print(a[0])

1

리스트와 인덱싱은 둘 다 대괄호로 표현한다.
위의 코드는 'a의 0번째에 접근한다'라는 뜻이라서 1이 나왔다.

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

위에서 5만 나오게 하려면 어떻게 하면 될까?

5는 a의 3번째 중에서 1번째다.

따라서 a[3]을 하면 결과로 [4, 5]가 나온다.
이 경우 두 가지 방법이 있다.

b = a[3]
c = b[1]
print(c)

b에 a의 3번째인 [4, 5]를 할당하고
c에 b의 1번째인 [5]를 할당하고
c를 출력하는 방법이다.
근데 이건 딱 봐도 복잡하다.

a[3][0]
print(a)

이렇게 하면 a의 3번째의 0번째만 뽑을 수 있다.

3. 리스트 슬라이싱

문자열 슬라이싱과 같다.

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

[1, 2]

a의 0번째부터 2번째 까지(=1번째까지)라는 뜻이라 결과가 [1, 2]로 나온다.

콜론을 두 개 만들면 맨 뒤의 숫자만큼 건너뛰겠다는 뜻이다.
예를 들어

a[0:4:2]

이건 0번째부터 4번째 까지 2씩 건너뛰겠다는 뜻이라 결과가 [1, 3]으로 나온다.

a[::-1]

처음부터 끝까지 -1씩 건너뛰겠다는 뜻이다.
[-1]은 뒤에서부터 첫 번째라는 뜻이라는 걸 문자열 자료형에서 배웠다.
따라서 이 말은
= 뒤에서부터 하나씩 건너뛰겠다
= 거꾸로 쓰겠다
그래서 결과가 [5, 4, 3, 2, 1]로 나온다.

4. 리스트 연산

리스트끼리 덧셈과 곱셈을 할 수 있다.

덧셈

a = [1, 2, 3]
b = [4, 5, 6]
a + b

결과는 [5, 7, 9]가 아니라 [1, 2, 3, 4, 5, 6]이다.

곱셈

a = [1, 2, 3]
a*3

결과는 [3, 6, 9]가 아니라 [1, 2, 3, 1, 2, 3, 1, 2, 3]이다.

5. 리스트 길이 구하기

문자열처럼 내장함수인 len()함수를 사용한다.

a = [1, 2, 3]
len(a)

3

6. 리스트 값 수정하기

a = [6, 7, 8]
a[2] = 4

[6, 7, 4]

a의 2번째 값을 4로 바꿔서 결과가 [6, 7, 4]로 나왔다.

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

결과 값은 [1, 4, 3]이 아니라 [1, 2, 4]다.
2를 바꾸는 게 아니라 2번째를 바꾸는 것이다.

7. del로 특정 값 삭제하기

인덱싱과 조합해서 특정 값만 삭제할 수 있다.
(del = delete)

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

[1, 2, 4, 5]

a의 2번째인 3이 삭제되었다.

슬라이싱과도 조합할 수 있다.

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

[1, 2]

a의 2번째부터 끝까지 삭제한 걸 확인할 수 있다.

8. 리스트 전용 함수

문자열처럼 리스트도 리스트에서만 사용할 수 있는 전용 함수가 있다.

1) append 함수

값 하나를 추가하는 함수
append(추가할 값) 의 형태로 작성한다.


a = [1, 2, 3]
a.append(4)
print(a)

[1, 2, 3, 4]

참고로 이렇게 사용할 수 없다.

추가할 값에 대괄호를 씌우면 이렇게 나온다.

a = [1, 2, 3]
a.append([4])
print(a)

[1, 2, 3, [4]]

2) extend 함수

값 하나 이상을 추가하는 함수다.
extend([추가할 값], [추가할 값])의 형태로 사용한다.
append는 하나만 추가하기 때문에 리스트를 씌우지 않아도 되지만 extend는 리스트를 꼭 씌워줘야 한다.

a = [1, 2, 3]
a.extend([4, 5])
print(a)

[1, 2, 3, 4, 5]

위의 리스트 덧셈과 비슷해보인다.

a = [1, 2, 3]
print(a+[4, 5])

[1, 2, 3, 4, 5]

이 경우 print(a)를 하면 [1, 2, 3]이 나온다.
extend는 a 자체를 변경한다.

extend 함수를 사용하지 않고도 추가할 수 있다.

a = [1, 2, 3]
a = a + [4, 5]
print(a+[4, 5])

[1, 2, 3, 4, 5]

3) insert 함수

원하는 위치에 값을 추가한다.
insert(원하는 위치, 추가할 값) 의 형태로 사용한다.

a = [1, 2, 3]
a.insert(0,4)
a

[4, 1, 2, 3]

0번째에 4를 추가하여 결과 값이 [4, 1, 2, 3]으로 나왔다.

4) sort 함수

숫자나 문자를 정렬하는 함수다.

a = [1, 4, 3, 2]
a.sort()
print(a)

[1, 2, 3, 4]

기본적으로 오름차순으로 정렬한다.
괄호 안에 reverse=True 값을 넣어주면 내림차순으로 정렬한다.

a = [1, 4, 3, 2]
a.sort(reverse=True)
print(a)

[4, 3, 2, 1]

5) reverse 함수

위에서 배운 sort(reverse=True)는 내림차순으로 정렬하는 것이고,
reverse는 말 그대로 거꾸로 작성하는 것이다.

a = [1, 4, 3, 2]
a.reverse()
print(a)

[2, 3, 4, 1]

위에서 배운 것처럼 a[::-1]을 사용해도 된다.

6) index 함수

특정 값의 위치를 찾는다.
문자열의 find함수와 비슷하다.

a = [1, 2, 3, 4]
a.index(3)

2

a에서 3의 위치는 2번째라서 값이 2로 나왔다.
문자열의 find함수는 찾으려는 요소가 없으면 결과 값이 -1로 나오지만,
index 함수는 찾으려는 요소가 없으면 에러가 발생한다.

a의 리스트 중 5가 없으니 정신 차리라고 친절히 알려준다.

7) remove 함수

특정 값을 삭제하고 싶을 때 위에서 배운 것처럼 내장 함수 del로 삭제할 수 있지만,
리스트 전용 함수인 remove로도 삭제할 수 있다.
del은 특정 위치의 값을 삭제하고
remove는 특정 값을 삭제한다.

del을 사용한 경우

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

[1, 2, 4, 5]

remove를 사용한 경우

a = [1, 2, 3, 4, 5]
a.remove(2)

[1, 3, 4, 5]

del a[삭제할 위치의 값] → 2번째인 3이 삭제됨
a.remove(삭제할 값) → 2가 삭제됨

내장 함수 del은 변수 앞에 사용하고
전용 함수 remove는 변수 뒤에 . 을 찍고 사용한다.

만약 리스트 안에 중복 값이 있다면

a = [1, 2, 3, 1, 2, 3]
a.remove(2)

[1, 3, 1, 2, 3]

이렇게 제일 먼저 발견된 값만 삭제한다.

8) pop 함수

pop은 삭제하는 게 아니라
가장 뒤에 있는 값을 뽑아내는 함수다.

a = [1, 2, 3]
a.pop()
print(a)

[1, 2]

위에서 3은 remove나 del처럼 삭제된 게 아니라서 딴 데다 저장 가능하다.

9) count 함수

특정 값의 개수를 센다.
문자열 자료형의 count함수와 같다.

a = [1, 2, 3, 1]
a.count(1)

2

a의 리스트 중 1의 개수인 2가 결과 값으로 나왔다.


여기까지 파이썬 리스트 자료형에 대한 설명이었습니다.

수정이 필요한 부분이나 이해가 안 가는 부분이 있다면 언제든 말씀해주세요!^0^

다음 글에서는 리스트 자료형 실습 문제를 풀어볼게요.

그럼 이만
총총

profile
인공지능이 인공지능을 개발하면 인공지능일까

0개의 댓글