1. 리스트 자료형
- 리스트 안에는 어떠한 자료형도 포함시킬 수 있다.
- a = [1, 2, 3]일 때 a[-1]은 문자열에서와 마찬가지로 리스트 a의 마지막 요솟값.
✔︎ 삼중 리스트 인덱싱
a = [1, 2, ['a', 'b', ['Life', 'is']]]
print(a[2][2][0])
=> Life
✔︎ 중첩된 리스트에서 슬라이싱
a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[3][:2])
=> ['a', 'b']
✔︎ 리스트 연산하기
연산 | 식 | 결과값 |
더하기(+) (a + b는 기존의 a, b와 별개의 새로운 주소값에 저장된다) |
a = [1, 2, 3] b = [4, 5, 6] a + b |
[1, 2, 3, 4, 5, 6] |
반복하기(*) | a = [1, 2, 3] a * 3 |
[1, 2, 3, 1, 2, 3, 1, 2, 3] |
길이 구하기(len) | a = [1, 2, 3] len(a) |
3 |
* 리스트 + 문자열
a = [1, 2, 3] a[2] + "hi" |
a = [1, 2, 3] str(a[2]) + "hi" |
오류 발생 | 3hi |
✔︎ 리스트의 수정과 삭제
연산 | 식 | 결과값 |
수정 | a = [1, 2, 3] a[2] = 4 a |
[1, 2, 4] |
삭제 | a = [1, 2, 3] del a[1] a |
[1, 3] |
a = [1, 2, 3, 4, 5] del a[2:] a |
[1, 2] |
✔︎ 리스트 관련 함수
연산 | 설명 | 식 | 결과값 |
리스트에 요소 추가(append) | .append(x)는 리스트의 맨 마지막에 x를 추가 | a = [1, 2, 3] a.append(4) #리스트의 맨 마지막에 4 추가 a |
[1, 2, 3, 4] |
a.append([5, 6]) a |
[1, 2, 3, 4, [5, 6]] | ||
리스트 정렬(sort) | 리스트의 요소를 순서대로 정렬 | a = [1, 4, 3, 2] a.sort() a |
[1, 2, 3, 4] |
a = [1, 4, 3, 2] a2 = sorted(a) a2 |
|||
리스트 뒤집기(reverse) | 그저 현재의 리스트를 그대로 거꾸로 뒤집음 | a = ['a', 'c', 'b'] a.reverse() a |
['b', 'c', 'a'] |
a[::-1] | |||
위치 반환(index) | - index(x)는 x의 위치 값 반환 - 리스트에 x가 없으면 오류 발생 |
a = [1, 2, 3] a.index(3) |
2 |
리스트에 요소 삽입(insert) | insert(a, b)는 리스트의 a번째 위치에 b를 삽입 | a = [1, 2, 3] a.insert(0, 4) |
[4, 1, 2, 3] |
리스트 요소 제거(remove) | remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제 | a = [1, 2, 3, 1, 2, 3] a.remove(3) |
[1, 2, 1, 2, 3] |
리스트 요소 끄집어내기(pop) | 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제 | a = [1, 2, 3] a.pop() |
3 |
a | [1, 2] | ||
리스트에 포함된 요소 x의 개수 세기(count) | count(x)는 리스트 안에 있는 x의 개수 | a = [1, 2, 3, 1] a.count(1) |
2 |
리스트 확장(extend) | - extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다 - a.extend([4, 5])는 a += [4, 5]와 동일하다 - a리스트 자체가 확장되므로 주소값이 동일하게 유지된다 |
a = [1, 2, 3] a.extend([4, 5]) a |
[1, 2, 3, 4, 5] |
리스트 요소 합(sum) | icecream = {'탱크보이': 1200, '폴라포': 1200, '빵빠레': 1800, '월드콘': 1500, '메로나': 1000} sum(icecream.values()) |
6700 |
2. 튜플 자료형
- 튜플은 리스트와 달리 값을 바꿀 수 없다.
- t1 = (1, ): 단지 1개의 요소만을 가질 때는 요소 뒤에 콤마(,)를 반드시 붙여야 한다.
- 만약 콤마를 붙이지 않고 t1 = (1)이라고 저장시 t1을 튜플이 아닌 정수로 인식.
- t2 = 1, 2, 3: 괄호()를 생략해도 무방하다.
튜플 다루기 | 식 | 결과값 |
인덱싱하기 | t1 = (1, 2, 'a', 'b') t1[0] |
1 |
슬라이싱하기 | t1 = (1, 2, 'a', 'b') t1[1:] |
(2, 'a', 'b') |
튜플 더하기 | t2 = (3, 4) t1 + t2 |
(1, 2, 'a', 'b', 3, 4) |
튜플 곱하기 | t2 * 3 | (3, 4, 3, 4, 3, 4) |
튜플 길이 구하기 | t1 = (1, 2, 'a', 'b') len(t1) |
4 |
✔︎ 데이터 언패킹과 star expression
기본적으로 데이터 언패킹은 좌변의 변수와 우변 데이터 개수가 같아야 한다. 하지만 star expression을 사용하면 변수의 개수가 달라도 데이터 언패킹을 할 수 있다. 튜플에 저장된 데이터 중에서 앞에 있는 두 개의 데이터만 필요할 경우 나머지 데이터의 언패킹 코드를 작성할 필요가 없다.
>> a, b, *c = (0, 1, 2, 3, 4, 5)
>> a
0
>> b
1
>> c
[2, 3, 4, 5]
3. 딕셔너리 자료형
- 딕셔너리 = 배열 = 해시: Key와 Value를 한 쌍으로 갖는 자료형
- 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
✔︎ 딕셔너리 쌍 추가, 삭제하기
구분 | 식 | 결과값 |
추가 | a = {1: 'a'} a[2] = 'b' a |
{1: 'a', 2: 'b'} |
a['name'] = 'pey' a |
{1: 'a', 2: 'b', 'name': 'pey'} | |
a[3] = [1, 2, 3] a |
{1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]} | |
삭제 | del a[1] #key가 1인 key: value 쌍 삭제 a |
{2: 'b', 'name': 'pey', 3: [1, 2, 3]} |
✔︎ 딕셔너리 사용법
1) 딕셔너리에서 Key 사용해 Value 얻기
a = {1: 'a', 2: 'b'}
a[1]
=> a
a[2]
=> b
- 딕셔너리 변수에서 [] 안의 숫자 1은 두 번째 요소를 뜻하는 것이 아니라 Key에 해당하는 1을 나타낸다.
2) 딕셔너리를 만들 때 주의사항
- 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다.
- Key에 리스트는 쓸 수 없다.
✔︎ 딕셔너리 관련 함수
함수 | 설명 | 식 | 값 |
Key 리스트 만들기(keys) | a.keys()는 딕셔너리 a의 Key만 모아서 dict_keys 객체 반환 | a = {'name': 'pey', 'phone': '01022225555', 'birth': '1118'} print(a.keys()) |
dict_keys(['name', 'phone', 'birth']) |
dict_keys 객체는 리스트를 사용하는 것과 차이는 없지만, 리스트 고유의 append, insert, pop, remove, sort 함수는 수행할 수 없다 | for k in a.keys(): print(k) |
name phone birth |
|
dict_keys 객체를 리스트로 변환 | print(list(a.keys())) | ['name', 'phone', 'birth'] | |
Value 리스트 만들기(values) | - values함수를 호출하면 dict_values 객체 반환 - 리스트를 사용하는 것과 동일 |
print(a.values()) | dict_values(['pey', '01022225555', '1118']) |
Key, Value 쌍 얻기(items) | - items함수는 Key와 Value의 쌍을 ㅌ튜플로 묶은 값을 dict_items 객체로 반환 - 리스트를 사용하는 것과 동일 |
print(a.items()) | dict_items([('name', 'pey'), ('phone', '01022225555'), ('birth', '1118')]) |
Key: Value 쌍 모두 지우기(clear) | 딕셔너리 안의 모든 요소 삭제 | print(a.clear()) | {} |
Key로 Value 얻기(get) | a.get('name')은 a['name']과 동일한 결괏값 반환 |
a = {'name': 'pey', 'phone': '01022225555', 'birth': '1118'} print(a.get('name')) |
pey |
존재하지 않는 키로 값을 가져오려 할 경우 - a.get('nokey')는 None을 반환 - a['nokey']는 오류 발생 |
print(a.get('nokey')) |
None | |
딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때는 get(x, '디폴트 값')을 사용 | print(a.get('foo', 'bar')) | bar | |
해당 Key가 딕셔너리 안에 있는지 조사하기(in) | a = {'name': 'pey', 'phone': '01022225555', 'birth': '1118'} print('name' in a) print('email' in a) |
True False |
|
추가(update) | 기존 딕셔너리에 새 딕셔너리 값 추가하기 | icecream = {'탱크보이': 1200, '폴라포': 1200, '빵빠레': 1800} new_product = {'팥빙수':2700} icecream.update(new_product) print(icecream) |
{'탱크보이': 1200, '폴라포': 1200, '빵빠레': 1800, '팥빙수':2700} |
zip과 dict | 두 개의 튜플을 하나의 딕셔너리로 변환 | keys = ("apple", "pear", "peach") vals = (300, 250, 400) result = dict(zip(keys, vals)) print(result) |
{'apple': 300, 'pear': 250, 'peach': 400} |
Q2 딕셔너리 값 추출하기
다음은 딕셔너리의 a에서 'C'라는 key에 해당하는 value를 출력하는 프로그램이다.
a = {'A': 90, 'B': 80}
a['C']
하지만 a 딕셔너리에는 'C'라는 key가 없으므로 오류가 발생한다. 'C'에 해당하는 key 값이 없을 경우 오류 대신 70을 얻을 수 있도록 수정하시오.
정답
a.get('C', 70)
70
Q3 리스트의 더하기와 extend 함수
리스트에서 +기호를 사용하여 더한 것과 extend한 것의 차이점이 있을까? 있다면 그 차이점을 설명하시오.
정답 ↓
+를 사용하면 리스트 a의 값이 변하는 것이 아니라 두 리스트가 더해진 새로운 리스트가 반환된다.
반면 extend를 사용하면 주소 값이 변하지 않고 그대로 유지된다.
예제. 다음 리스트에서 최댓값과 최솟값을 출력하라. (힌트: min(), max() 함수 사용)
nums = [1, 2, 3, 4, 5, 6, 7]
실행 예:
max: 7
min: 1
정답 ↓
print('max:', max(nums))
print('min:', min(nums))
예제. 다음 리스트의 합을 출력하라.
nums = [1, 2, 3, 4, 5]
실행 예:
15
정답 ↓
print(sum(nums))
예제. [튜플 언팩킹] 다음 코드의 실행 결과를 예상하라.
temp = ('apple', 'banana', 'cake')
a, b, c = temp
print(temp)
정답 ↓
apple banana cake
예제. 다음과 같이 10개의 값이 저장된 scores 리스트가 있을 때, start expression을 사용하여 좌측 8개의 값을 valid_score 변수에 바인딩하여라.
scores = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]
정답 ↓
scores = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]
*valid_score, _, _= scores
print(valid_score)
예제. [range함수] 1 부터 99까지의 정수 중 짝수만 저장된 튜플을 생성하라.
(2, 4, 6, 8 ... 98)
정답 ↓
data = tuple(range(2, 100, 2))
print( data )
예제. 사용자로부터 달러, 엔, 유로, 또는 위안 금액을 입력받은 후 이를 원으로 변환하는 프로그램을 작성하라. 각 통화별 환율은 다음과 같다. 사용자는 100 달러, 1000 엔, 13 유로, 100 위안과 같이 금액과 통화명 사이에 공백을 넣어 입력한다고 가정한다.
통화명 | 환율 |
달러 | 1167 |
엔 | 1.096 |
유로 | 1268 |
위안 | 171 |
>> 입력: 100 달러
116700.00 원
정답 ↓
환율 = {"달러": 1167, "엔": 1.096, "유로": 1268, "위안": 171}
user = input("입력: ")
num, currency = user.split()
print(float(num) * 환율[currency], "원")
예제. 리스트에 저장된 데이터를 아래와 같이 출력하라.
apart = [ [101, 102], [201, 202], [301, 302] ]
101 호
102 호
201 호
202 호
301 호
302 호
정답 ↓
for row in apart:
for col in row:
print(col, "호")
예제. 리스트에 저장된 데이터를 아래와 같이 출력하라.
apart = [ [101, 102], [201, 202], [301, 302] ]
301 호
302 호
201 호
202 호
101 호
102 호
정답 ↓
for row in apart[::-1]:
for col in row:
print(col, "호")
예제. data에는 매수한 종목들의 OHLC (open/high/low/close) 가격 정보가 바인딩 되어있다.
data = [
[ 2000, 3050, 2050, 1980],
[ 7500, 2050, 2050, 1980],
[15450, 15050, 15550, 14900]
]
수수료를 0.014 %로 가정할 때, 각 가격에 수수료를 포함한 가격을 result 이름의 리스트에 2차원 배열로 저장하라. 저장 포맷은 아래와 같다. 각 행에 대한 데이터끼리 리스트에 저장되어야 한다.
2000.28
3050.427
2050.2870000000003
...
정답 ↓
result = []
for line in data:
sub = []
for column in line:
sub.append(column * 1.00014)
result.append(sub)
print(result)
'◦ Algorithm > Python' 카테고리의 다른 글
[점프투파이썬] 클래스 (0) | 2021.01.30 |
---|---|
[점프투파이썬] 함수, 사용자 입출력 (0) | 2021.01.29 |
[점프투파이썬] 집합, 불, 변수 (0) | 2021.01.28 |
[점프투파이썬] 제어문 (0) | 2021.01.25 |
[점프투파이썬] 문자열 (0) | 2021.01.09 |