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)

 

 

+ Recent posts