Python & Django Day4

6 minute read

Fastcampus Python&Django 온라인 강의를 듣고 작성한 Class note입니다.

데이터 구조(Dictionary, set), tuple(list comprehension)

Tuple

immutable + 순서가 있는 자료형

(1, 2, 3, 4)

1tuple1 =(1, 2, 3, 4)

튜플을 리스트로 바꾸기 :

  1. 1 ~ 100까지 숫자를 포함하는 Tuple을 만드세요.

  2. 그 Tuple을 list로 바꾸세요.

1tuple_1_to_100 = tuple(range(1, 101))
2list_1_to_100 = list(tuple_1_to_100)

Dictionary

key, value형태의 자료형 / 순서가 보장되지 않음

{‘key1’: ‘value1’, ‘key2’: ‘value2’}

1 d = {}
2 d['name'] = 'sol'
3# {'name': 'sol'}

Dictionary 만들기

  1. 내 정보를(이름, 나이, 연락처) dictionary로 만들어보세요.

  2. 이메일 정보를 추가하세요.

  3. 각 정보를 대괄호와, .get메소드를 이용하여서 출력해보세요.

1info = {'name' : 'Jane', 'age':30, 'phone':'010-123-1234'}
2info['email'] = 'email@abc.com'
3info['email']
4info.get('name')
  • get을 쓰면 값이 없는 경우도 에러가 나지 않고, none을 출력하게 된다.

Tuple을 Dictionary로 바꾸기

 1myInfo = [('name', 'Jane'), ('age', 30), ('phone', '010-123-1234')]
 2
 3# 방법1
 4myInfoDic = {}
 5
 6for el in myInfo:
 7    myInfoDic[el[0]] = el[1]
 8
 9# 방법2
10dict(myInfo)

CSV (comma-separated values)

csv를 dictionary 형태로 바꾸기 ********

 1csv_values = """
 2이름, 연락처, 나이, 이메일
 3철수, 010-1234-1234, 23, ch@ab.com
 4영희, 010-2485-4728, 39, yh@ac.com
 5"""
 6
 7csv_values = csv_values.strip('\n')  
 8# strip(): 양 끝에 괄호 안의 값이 있으면 모두 삭제해주는 메서드
 9
10# string = "-----e---e---e-e--e---"
11# print(string.strip('-'))
12# e---e---e-e--e
13
14
15csv_list = csv_values.split('\n')    # enter를 기준으로 값 나누어서 리스트 만듦
16print(csv_list)
17
18# ['이름, 연락처, 나이, 이메일', '철수, 010-1234-1234, 23, ch@ab.com', '영희, 010-2485-4728, 39, yh@ac.com']
19
20info = {}
21for el in csv_list:
22    print(el.split(','))   # list로 뽑아 냄
23
24    # ['이름', ' 연락처', ' 나이', ' 이메일']
25    # ['철수', ' 010-1234-1234', ' 23', ' ch@ab.com']
26    # ['영희', ' 010-2485-4728', ' 39', ' yh@ac.com']
27
28#-------------------------------------------------
29keys = []
30for el in csv_list[0].split(','):
31    keys.append(el.strip(' '))
32
33print(keys)    # ['이름', '연락처', '나이', '이메일']
34
35#-------------------------------------------------
36results = []
37for val in csv_list[1:]:
38    result_dict = {}
39    i = 0
40    for el in val.split(','):
41        result_dict[keys[i]] = el.strip(' ')
42        i += 1
43    results.append(result_dict)
44
45# [{'이메일': 'ch@ab.com', '이름': '철수', '나이': '23', '연락처': '010-1234-1234'}, {'이메일': 'yh@ac.com', '이름': '영희', '나이': '39', '연락처': '010-2485-4728'}]

Set

 1# 빈 set 만들기
 2set1 = set()
 3
 4# set에 값 추가하기
 5set1.add(3)
 6set1.add(4)
 7
 8# 합집합
 9set1.union(set2)
10
11# set1만 갖고 있는 원소
12set1.difference(set2)
 1# set1 변수에 1 ~ 100까지 숫자 중 3, 5, 15의 배수
 2
 3set1, set2, set3 = set(), set(), set() 
 4
 5for i in range(1, 101):
 6    if i % 15 == 0:
 7        set3.add(i)
 8    elif i % 5 == 0:
 9        set2.add(i)
10    elif i % 3 == 0:
11        set1.add(i)
12
13print("3의 배수 : ", set1)
14print("5의 배수 : ", set2)
15print("15의 배수 : ", set3)
16
17
18# 3의 배수 :  {3, 6, 9, 12, 18, 21, 24, 27, 33, 36, 39, 42, 48, 51, 54, 57, 63, 66, 69, 72, 78, 81, 84, 87, 93, 96, 99}
19# 5의 배수 :  {65, 35, 100, 5, 70, 40, 10, 80, 50, 20, 85, 55, 25, 95}
20# 15의 배수 :  {75, 45, 15, 90, 60, 30}
21
22
23# 두 set1, set2에서 겹치는 숫자를 출력
24print(set1.union(set2))
25    # {65, 66, 3, 69, 6, 5, 72, 9, 70, 10, 12, 78, 80, 81, 18, 84, 21, 20, 87, 24, 85, 25, 27, 93, 95, 96, 33, 99, 36, 35, 100, 39, 40, 42, 48, 50, 51, 54, 55, 57, 63}
26
27
28# set3에서 set1에 포함되지 않은 숫자를 출력
29print(set3.difference(set1))
30    # {75, 45, 15, 90, 60, 30}

Comprehensions

List Comprehension

for

1a = [i for i in range(1, 101)]
2a = [i**2 for i in range(1, 101)]

if

1a = [ i for i in range(1, 101) if i % 2 ==0]

[ [1, 2], [1, 2] ] 만들기

 1#result = []
 2#for i in range(1, 3):
 3#    el = []
 4#    for j in range(1, 3):
 5#        el.append(j)
 6#    result.append(el)
 7    
 8
 9result = [[x for x in range(1, 3)] for _ in range(2)]
10# 인덱스 사용 안하고 횟수만 사용했을 때 _로 표기함