2.8 여러 개의 자료를 한 변수에 담기
1. 여러 개의 자료를 한 변수에 담기
- 지금까지는 하나의 변수에 하나의 자료를 저장
- 하지만 여러개의 자료를 저장할 필요가 있음
- 파이썬에서는 ***하나의 변수***에 여러 개의 자료를 저장하는 두 가지 방법을 사용
- 여러 개의 자료가 순서가 있을 때에는 ***리스트(list)***
- 여러 개의 자료가 이름이 있을 때는 ***딕셔너리(dictionary)***
2. 자료의 순서만 가지는 리스트 자료형
- 리스트 자료형에는 여러개의 자료를 순서에 따라 저장
- 리스트변수 = [자료1, 자료2, 자료3 ...]
3. 인덱싱
- 리스트 자료형 변수에서 특정한 자료를 꺼내려면 익덱싱을 함
- 이 때 자료의 순서를 뜻하는 숫자를 인덱스(index)라고 함.
4. 자료 이름만 가지는 딕셔너리 자료형
- 딕셔너리변수 = {자료이름1: 자료값1, 자료이름2: 자료값2, 자료이름3: 자료값3}
- 딕셔너리 자료형 변수에도 인덱싱이 가능하다.
b = {"math": 88, "english": 90, "history": 100}
b
# 결과 : {'math': 88, 'english': 90, 'history': 100}
# 딕셔너리 인덱싱
b["math"]
# 결과 : 88
(b['math'] + b['history']) / 2
# 결과 : 94.0
5. 리스트와 딕셔너리에 들어가는 자료의 자료형
- 리스트 변수에는 같은 자료형 뿐만이 아니라, 다른 자료형도 담을 수 있다
-
d = [1, 3.14, "pi"] d[0] # 결과 : 1 # 심지어 리스트 변수에 또 다른 리스트 변수나 딕셔너리 변수를 넣을 수 있다. e = [[1, 10], [2, 20]] e[0] # 결과 : [1, 10] e[0][0] # 결과 : 1 f = [{0: 0, 1:10}, {0: 1, 1: 2}] f[0] # 결과 : {0: 0, 1: 10} f[0][1] # 결과 : 10
2.9 파이썬에서 리스트 자료형 다루기
1. 자료의 개수 : 리스트 변수에 자료가 몇 개 들어가는 지 알기 위해선 len
a = [1, 2, 3]
len(a)
# 결과 : 3
2. 수열 생성하기
- 0부터 n-1까지 1씩 증가하는 n개의 숫자를 가진 수열 리스트는 range 명령으로 생성
- pyhton 2 버전 range 만 사용하면 되지만
- pyhton 3 버전에서는 range 명령으로 만들거 진 값을 list 명령으로 사용하여 명시적으로 리스트로 바꾸어야 함
b = list(range(10)) print(b) c = list(range(1, 10 + 1)) print(c) d = list(range(1, 10, 3)) print(d) #결과 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 4, 7]
3. 값을 바꾸기
- 특정한 원소의 값을 다른 값으로 바꾸는 것을 갱신(update)라고 함.
-
d[0] = 100 d # 정답 : [100, 4, 7]
4. 자료 추가하기
- 리스트 변수 마지막에 자료를 더 추가하려면 append 메서드를 사용.
- 메서드란 변수 다음에 점을 찍고 쓰는 명령.
e = list(range(4))
print(e)
e.append(4)
print(e)
e.append(10)
print(e)
# 정답
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 10]
5. 자료 삭제하기
- 하나를 삭제하려면 del 명령 사용
f = list(range(5))
print(f)
del f[0]
print(f)
# 정답 :
[0, 1, 2, 3, 4]
[1, 2, 3, 4]
6. 슬라이싱
- 특정 범위의 자료를 모두 가져오고 싶다면 슬라이싱 사용
g = list(range(20))
print(g)
print(g[0:5])
print(g[10:15])
# 결과
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2, 3, 4]
[10, 11, 12, 13, 14]
7. 역 인덱싱(음수 인덱싱)
- 가장 뒤의 원소는 0이 아닌 -1이다.
8. 복수 할당
- 리스트의 각 원소값을 여러개의 변수에 나누어 넣고 싶으면 쉼표를 사용하여 사용.
g = [1, 2, 3]
g1, g2, g3 = g
print(g1)
print(g2)
print(g3)
# 정답
1
2
3
😢👍 2.10 리스트와 반복문을 사용하여 계산하기
1. 리스트와 반복문을 사용하여 계산하기
- 반복문은 리스트 자료형 변수를 대상으로 여러 가지 계산을 할 때 많이 사용
- 예를 들어 10번의 시험 성적을 담고 있는 a라는 변수가 있을 때, 평균 성적을 구하는 것
a = [90, 92, 33, 55, 77, 86, 84, 93]
a
len(a)
# 결과 : 8
sum = 0
for i in range(len(a)):
sum += a[i]
print(sum)
ave = sum / len(a)
print(ave)
# 결과 :
610
76.25
# 만약 학생이 두명이고 일 때
s = []
a1 = [90, 85, 95, 80, 90, 100, 85, 75, 85, 80]
a2 = [95, 90, 90, 90, 95, 100, 90, 80, 95, 90]
for i in range(len(a1)):
s.append(a1[i] + a2[i])
s
# 결과 :
[185, 175, 185, 170, 185, 200, 175, 155, 180, 170]
2. 리스트의 원소를 직접 반복문에서 사용하기
- 지금까지는 for 반복문을 사용할 때
- range 명령으로 리스트에 적용할 익덱스 정수를 만들어서 리스트의 원소 값을 찾았음
- 하지만 for 반복문에서 리스트의 원소를 직접 뽑아 카운터 변수에 넣을 수도 있다.
# 지금까지 반복문을 사용해 온 range 명령은
# 사실 리스트를 만드는 명령
list(range(5))
# 결과 :
[0, 1, 2, 3, 4]
# 따라서 다음 코드는
for i in range(5):
print(i)
# 다음과 같다.
for i in [0, 1, 2, 3, 4]:
print(i)
# 따라서 가장 위에서 한 학생의 평균 계산 코드는
# 다음 코드와 동일
print(a)
# 결과 : [90, 92, 33, 55, 77, 86, 84, 93]
sum = 0
for ai in a:
sum = sum + ai
ave = sum / len(a)
ave
# 결과 : 75.25
3. 😢enmerate 함수
- 때로는 반복문에 정수 인덱스가 필요할 때도 있음
- 예를 들어 반복문에서 appned 메서드를 쓰면 계산 속도가 저하
- 이때는 미리 저장 공간을 만들어 놓고 해당 위쳉 계싼 결과를 갱신해야 함.
- 이때 enumerate 명령을 쓸수 있다.
- enumerate 명령은 리스트의 원소를 반복하면서
- 동시에 인덱스 값도 생성한다.
for i, e in enumerate(["a", "b", "c"]):
print("i = %d, e = %s" % (i, e))
# 결과 :
i = 0, e = a
i = 1, e = b
i = 2, e = c
s = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
a1 = [90, 85, 95, 80, 90, 100, 85, 75, 85, 80]
a2 = [95, 90, 90, 90, 95, 100, 90, 80, 95, 90]
for i, (a1i, a2i) in enumerate(zip(a1, a2)):
s[i] = a1i + a2i
s
# 결과 :
[185, 175, 185, 170, 185, 200, 175, 155, 180, 170]
4. 리스트의 리스트
- 학새이 5명이고 각 학생이 10번의 시험에 대한 성적을 가진다면?
- 다음과 같은 리스트의 리스트로 전체 시험 성적을 나타낼 수 있음.
# 👍 2중 for문 이해해 중요함!
X = [[85, 90, 20, 50, 60, 25, 30, 75, 40, 55],
[70, 100, 70, 70, 55, 75, 55, 60, 40, 45],
[25, 65, 15, 25, 20, 5, 60, 70, 35, 10],
[80, 45, 80, 40, 75, 35, 80, 55, 70, 90],
[35, 50, 75, 25, 35, 70, 65, 50, 70, 10]]
sum = 0
num = 0
for i in range(len(X)):
for j in range(len(X[i])):
num = num + 1
sum = sum + X[i][j]
sum / num
# 결과 : 52.7
5. 😢zip 함수
- zip 함수는 두 개의 리스트를 합쳐서 각 리스트 원소의 쌍을 원소로 가지는 하나의 리스트르 만든다.
- 파이썬 3에서는 명시적으로 list 명령을 사용해야 리스트가 된다.
a1
# 결과 :
[90, 85, 95, 80, 90, 100, 85, 75, 85, 80]
a2
# 결과 :
[95, 90, 90, 90, 95, 100, 90, 80, 95, 90]
a12 = list(zip(a1, a2))
a12
[(90, 95),
(85, 90),
(95, 90),
(80, 90),
(90, 95),
(100, 100),
(85, 90),
(75, 80),
(85, 95),
(80, 90)]
# 이때 소괄호로 표시된 묶음은 튜플(tuple)이라고 함.
# 따라서 모든 학생의 두 과목 성적 합산을 구하는 코드는
# 다음과 같이 고칠 수 있음.
s = []
a1 = [90, 85, 95, 80, 90, 100, 85, 75, 85, 80]
a2 = [95, 90, 90, 90, 95, 100, 90, 80, 95, 90]
for a1i, a2i in zip(a1, a2):
s.append(a1i + a2i)
s
# 결과 :
[185, 175, 185, 170, 185, 200, 175, 155, 180, 170]
# zip 함수를 사용할 때
#리스트의 리스트 인수를 하나만 넣고 인수의 앞에
# * 기호를 붙이면 리스트 쌍으로 바꾼다.
a12
# 결과 :
[(90, 95),
(85, 90),
(95, 90),
(80, 90),
(90, 95),
(100, 100),
(85, 90),
(75, 80),
(85, 95),
(80, 90)]
-----------------------------------------------------------------
a21 = list(zip(*a12))
a21
# 결과 :
[(90, 85, 95, 80, 90, 100, 85, 75, 85, 80),
(95, 90, 90, 90, 95, 100, 90, 80, 95, 90)]
'😀 기초 > 파이썬(Python)' 카테고리의 다른 글
2장 파이썬 기초문법(2.13 ~ 2.15) (0) | 2022.01.24 |
---|---|
2장 파이썬 기초문법(2.11 ~ 2.12) (0) | 2022.01.23 |
2장 파이썬 기초문법(2.2장 ~ 2.7장) (0) | 2022.01.21 |
2장 파이썬 기초문법(2.0장 ~ 2.2장) (0) | 2022.01.20 |
1장 파이썬 설치와 설정(1.1장 ~ 1.5장) (0) | 2022.01.20 |