04 - List
Last updated -
2023년 03월 10일
Edit Source
해당 게시글은 파이썬 입문과 크롤링기초 부트캠프 강의를 정리한 내용입니다.
# 01. 리스트 자료형이란?
데이터 구조 - 리스트(list)라고 하는데, 여기서 데이터 구조란, 연관있는 데이터를 어떻게 컴퓨터로 효율적으로 다룰 수 있을 지에 관한 것이다.
리스트
여러 가지 관계가 있는 데이터를 하나의 변수로 다루는 방법
[ ]
안에 ,
를 사용해서 데이터를 넣으면 된다.
예시) mydata = [1, 2, 'hello', 1.2]
각 데이터는 인덱스를 사용해서 다룰 수 있다.
- 리스트 선언 방법
- 빈 배열을 만들 때는
[]
보다는 list()
를 써주도록 하자.
1
2
3
4
5
| a = list()
b = []
c = [1, 2, 3]
d = ['Python', 'is', 'good']
e = [1, 2, ['Python', 'is', 'good']]
|
- 리스트 선언
1
2
3
| - 리스트변수 = [ ]
- 리스트변수 = list()
- 리스트변수 = [데이터1, 데이터2, ...]
|
- 리스트 추가
1
2
| - 리스트변수.append(데이터)
- 리스트변수.insert(인덱스번호, 데이터)
|
- 리스트 삭제
1
2
| - 리스트변수.remove(데이터)
- del 리스트변수[인덱스번호]
|
- 리스트 데이터 수정
1
| - 리스트변수[인덱스번호] = 수정할 데이터
|
# 02. 인덱싱과 슬라이싱
리스트 역시 문자열과 동일하게 인덱싱과 슬라이싱을 할 수 있는데, 이를 잘 활용하여야 한다.
# 리스트의 인덱싱
1
2
3
4
| a = [1, 2, 3]
print(a[0] + a[2])
출력결과 : 4
|
1
2
3
4
5
6
7
8
| a = [1, 2, 3, ['a', 'b', 'c']]
print(a[0])
print(a[3])
print(a[-1])
출력결과 : 1
출력결과 : ['a', 'b', 'c']
출력결과 : ['a', 'b', 'c']
|
C언어의 2차원 배열 느낌도 생각하자. list[][]
1
2
3
4
5
6
| a = [1, 2, 3, ['a', 'b', 'c']]
print(a[3][0])
print(a[-1][0])
출력결과 : a
출력결과 : a
|
1
2
3
4
| a = [1, 2, ['a', 'b', ['Python', 'is', 'good']]]
print(a[2][2][0])
출력결과 : Python
|
# 리스트의 슬라이싱
1
2
3
4
5
6
7
8
9
| a = [1, 2, 3, 4, 5]
b = a[:2]
c = a[2:]
print(b)
print(c)
출력결과 : [1, 2]
출력결과 : [3, 4, 5]
|
1
2
3
4
5
6
| a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[2:5])
print(a[3][:2])
출력결과 : [3, ['a', 'b', 'c'], 4]
출력결과 : ['a', 'b']
|
# split()으로 리스트 다루기
사용자로부터 주민등록번호를 입력 받고, 사용자가 남성인지 여성인지 출력하시오. (주민등록번호 뒷자리의 시작이 1이거나 3이면 남성, 2이거나 4이면 여성이다.)
1
2
3
4
5
6
7
8
9
10
| data = input("주민등록번호를 '-' 포함해서 입력하세요. ")
if (int(data.split('-')[1][0]) == 1) or (int(data.split('-')[1][0]) == 3):
print("남성입니다.")
elif (int(data.split('-')[1][0]) == 2) or (int(data.split('-')[1][0]) == 4):
print("여성입니다.")
else:
print("잘못된 주민등록번호 입니다.")
|
# 03. 리스트 연산하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| a = [1, 2, 3]
b = [4, 5, 6]
# 리스트 더하기
print(a + b)
출력결과 : [1, 2, 3, 4, 5, 6]
# 리스트 곱하기 (반복)
print(a * 3)
출력결과 : [1, 2, 3, 1, 2, 3, 1, 2, 3]
# 리스트 길이 구하기
print(len(a))
출력결과 : 3
|
1
2
3
4
5
6
| a = [1, 2, 3]
print(a[2] + "hi")
print(str(a[2]) + "hi")
출력결과 : TypeError: unsupported operand type(s) for +: 'int' and 'str'
출력결과 : 3hi
|
# 04. 수정, 삭제, 추가
# 리스트 수정
1
2
3
4
5
| language = ["python", "java", "c++"]
language[2] = "c"
print(language)
출력결과 : ['python', 'java', 'c']
|
# 리스트 삭제
del 함수 이용
리스트의 인덱스를 가르켜서 내용 삭제
1
2
3
4
5
6
7
8
9
10
| a = [1, 2, 3]
b = [1, 2, 3, 4, 5]
del a[1]
del b[:2]
print(a)
print(b)
출력결과 : [1, 3]
출력결과 : [3, 4, 5]
|
remove 함수 이용
리스트의 내용을 가르켜서 삭제
첫 번째로 나오는 내용이 삭제된다.
1
2
3
4
5
| location = ['서울시', '경기도', '서울시', '부산시']
location.remove('서울시')
print(location)
출력결과 : ['경기도', '서울시', '부산시']
|
1
2
3
4
5
6
| location = ['서울시', '경기도', '서울시', '부산시']
print(location.pop())
print(location)
출력결과 : 부산시
출력결과 : ['서울시', '경기도', '서울시']
|
# 리스트 추가
append 함수 이용
append 함수는 하나의 요소만 추가 가능
리스트의 맨 마지막에 추가
1
2
3
4
5
6
7
8
9
10
| a = [1, 2, 3]
a.append(4)
print(a)
a.append([5, 6])
print(a)
출력결과 : [1, 2, 3, 4]
출력결과 : [1, 2, 3, 4, [5, 6]]
|
insert 함수 이용
지정한 인덱스에 요소 추가
1
2
3
4
5
6
7
8
9
10
| a = [1, 2, 3]
a.insert(3, 4)
print(a)
a.insert(0, 5)
print(a)
출력결과 : [1, 2, 3, 4]
출력결과 : [5, 1, 2, 3, 4]
|
# 05. 리스트 다양한 함수들
- sort()
- reverse()
- 리스트 요소 역순으로 뒤집기 (순서대로 정렬하고 뒤집기 X)
- index()
- find()
- count()
- extend()
sort(), reverse()
1
2
3
4
5
6
7
8
9
10
| a = [2, 1, 4, 3]
a.sort()
print(a)
b = [2, 1, 4, 3]
b.reverse()
print(b)
출력결과 : [1, 2, 3, 4]
출력결과 : [3, 4, 1, 2]
|
1
2
3
4
5
6
7
| # 만약, 역순으로 순서대로 배치하고 싶으면, sort -> reverse
a = [1, 8, 0, 9, 14]
a.sort()
a.reverse()
print(a)
출력결과 : [14, 9, 8, 1, 0]
|
index()
1
2
3
4
5
6
7
8
| a = [1, 2, 3, 4]
print(a.index(1))
print(a.index(3))
print(a.index(5))
출력결과 : 0
출력결과 : 2
출력결과 : ValueError: 5 is not in list
|
index()와 find() 비교
- 이 둘은 비슷한 역할을 하는 것 같지만, 조금 다르다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # index()의 경우
letters = input()
var = letters.index('n')
if var >= 0:
print("입력한 문자에 n이 있습니다.")
else:
print("입력한 문자에 n이 없습니다.")
출력결과 : n이 있으면 -> 입력한 문자에 n이 있습니다.
출력결과 : n이 없으면 -> Value Error
# find()의 경우
letters = input()
var = letters.find('n')
if var >= 0:
print("입력한 문자에 n이 있습니다.")
else:
print("입력한 문자에 n이 없습니다.")
출력결과 : n이 있으면 -> 입력한 문자에 n이 있습니다.
출력결과 : n이 없으면 -> 입력한 문자에 n이 없습니다.
|
사용자가 입력한 것에 n이 있다면 정상적으로 “입력한 문자에 n이 있습니다.“라고 출력 되지만, n이 없는 경우, index()
는 Value Error가 출력되고 find()
는 정상적으로 값이 출력된다.
이는,
[잔재미] String에 기록되어있는 내용인데, find()
는 없는 값을 찾으면 -1을 반환하지만, index()
는 없는 값을 찾으면 오류를 반환하기 때문이다.
count()
1
2
3
4
| a = [1, 2, 3, 1, 1, 5]
print(a.count(1))
출력결과 : 3
|
extend()
1
2
3
4
5
| a = [1, 2, 3]
a.extend([4, 5])
print(a)
출력결과 : [1, 2, 3, 4, 5]
|
1
2
3
4
5
6
| a = [1, 2, 3]
b = [4, 5]
a.extend(b)
print(a)
출력결과 : [1, 2, 3, 4, 5]
|
1
2
3
4
5
| a = [1, 2, 3]
a += [4, 5]
print(a)
출력결과 : [1, 2, 3, 4, 5]
|