01.list
1 '''
2 list 특징
3 - 1차원 배열 구조
4 형식) 변수 = [값1, 값2]
5 - 다양한 자료형 저장 가능
6 - index 사용=순서 존재
7 형식) 변수[n]
8 - 값 수정(추가,수정,삭제,삽입)
9 '''
10
11 # 1. 단일 list
12 lst = [1,2,3,4,5]
13 print(lst) # [1, 2, 3, 4, 5]
14 lst = list(range(1,6))
15 print(lst) # [1, 2, 3, 4, 5]
16
17 for i in lst :
18 print(lst[i-1:]) # [start:]
19
20 '''
21 [1, 2, 3, 4, 5]
22 [2, 3, 4, 5]
23 [3, 4, 5]
24 [4, 5]
25 [5]
26 '''
27
28 for i in lst :
29 print(lst[:i]) # [:end]
30 '''
31 [1]
32 [1, 2]
33 [1, 2, 3]
34 [1, 2, 3, 4]
35 [1, 2, 3, 4, 5]
36 '''
37
38 # 마지막 5개 자료
39 x = list(range(1,1001))
40 print(x[:5]) # 첫 5개
41 print(x[-5:]) # 마지막 5개
42 '''
43 [1, 2, 3, 4, 5]
44 [996, 997, 998, 999, 1000]
45 '''
46
47 # 홀수/짝수 단위 index
48 print(x[::2]) # [1, 3, 5, 7, 9,
49 print(x[1::2]) # [2, 4, 6, 8, 10,
50
51
52 # 2. 중첩 list
53 '''
54 변수 = [ [] ]
55 '''
56
57 a = ['a', 'b', 'c']
58 b = [10, 20, a, True, "string"]
59 print(b)
60 # [10, 20, ['a', 'b', 'c'], True, 'string']
61
62 # 중첩 list index
63 print(b[0]) # 10
64 print(b[2]) # a - ['a', 'b', 'c']
65 print(b[2][2]) # c
66
67
68 # 3. 추가,수정,삭제,삽입
69 '''
70 Object.member()
71 num.appen(),remove(),insert()
72 '''
73
74 num = ['one', 'two', 'three', 'four']
75 print(len(num)) # 4
76 print(type(num)) # <class 'list'>
77
78 # 1) 추가
79 num.append(5) # 마지막 추가
80 print(num)
81 # ['one', 'two', 'three', 'four', 5]
82
83 # 2) 수정[index 이용]
84 num[4] = 'five'
85 print(num)
86 # ['one', 'two', 'three', 'four', 'five']
87
88 # 3) 삭제
89 num.remove('two')
90 print(num)
91 # ['one', 'three', 'four', 'five']
92
93 # 4) 삽입
94 num.insert(0, 'zero')
95 print(num)
96 # ['zero', 'one', 'three', 'four', 'five']
97
98
99 # 4. list 연산
100
101 # 1) list 결합
102 x = [1,2,3,4]
103 y = [1.5, 2.5]
104 z = x + y # new object = 결합
105 print('z=', z) # z= [1, 2, 3, 4, 1.5, 2.5]
106
107 # 2) list 확장
108 x.extend(y)
109 print('x=', x) # x= [1, 2, 3, 4, 1.5, 2.5] : 단일 list
110
111 # 3) list 추가
112 x.append(y)
113 print('x=', x)
114 # x= [1, 2, 3, 4, 1.5, 2.5, [1.5, 2.5]] : 중첩 list
115
116 # 4) 곱셈
117 lst = [1,2,3,4]
118
119 result = lst * 2
120 print(result) # [1, 2, 3, 4, 1, 2, 3, 4]
121
122 # 각 원소 연산
123 for i in range(len(lst)) : # 0~3
124 print(lst[i] * 2)
125 '''
126 2
127 4
128 6
129 8
130 '''
131
132 '''
133 list : 선형대수 연산 불가
134 -> numpy 형 변환 필요
135 '''
02.list2
1 '''
2 1. 성적처리
3 2. list + for
4 '''
5
6 # 1. 성적처리
7 hong = [95, 85, 63]
8 lee = [95, 85, 90]
9 kang = [99, 85, 90]
10
11 # 중첩 list
12 student = [hong, lee, kang] # [[],[],[]]
13
14 print('국어\t영어\t수학')
15 print('='*20)
16 for score in student : # 학생수
17 print("%d\t%d\t%d"%(score[0], score[1], score[2]))
18
19 print('='*20)
20
21
22 print('국어\t영어\t수학')
23 print('='*20)
24 for score in student : # 학생수
25 print("{} {} {}".format(score[0],score[1],score[2]))
26
27 print('='*20)
28
29
30 # 2. list + for
31 '''
32 형식1)
33 변수 = [ 실행문 for 변수 in 열거형객체 ]
34 - 실행순서 : 1. for > 2. 실행문 > 3. 변수 저장
35 '''
36
37 # 영문자/숫자 -> ASCII(기계어)
38 string = "ab#c123d%f$z"
39
40 help(ord)
41
42 asc = [ord(ch) for ch in string] # 'a' -> 97
43 print('ASCII=', asc)
44 # ASCII= [97, 98, 99, 49, 50, 51, 100, 102, 122]
45
46
47 # dummy 변수 만들기 : 홀수=0, 짝수=1
48 x = list(range(1,101))
49 dummy = [1 if i%2 == 0 else 0 for i in x ]
50 print(dummy) # [0, 1, 0, 1, ...]
51
52 # 문) string변수를 대상으로 영문자->"영문",숫자->"숫자" 더미 생성
53 # 힌트: a~z(97~122)
54
55 dummy2 = ["영문" if ord(ch)>=97 and ord(ch)<=122 else "숫자"
56 for ch in string]
57 print(dummy2) # "abc123dfz"
58 # ['영문', '영문', '영문', '숫자', '숫자', '숫자', '영문', '영문', '영문']
59
60
61 '''
62 형식2)
63 변수 = [ 실행문 for 변수 in 열거형객체 if 조건식]
64 - 실행순서 : 1. for > 2. if > [3. 실행문] > 4. 변수 저장
65 '''
66
67 num = list(range(1,11))
68 print(num) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
69
70 num2 = [n for n in num if n%2 == 0]
71 print(num2) # [2, 4, 6, 8, 10]
72
73 # 문2) string변수를 대상으로 영문자만 추출하기
74 alpha = [ch for ch in string if ord(ch)>=97 and ord(ch)<=122]
75 print(alpha)
76 # ['a', 'b', 'c', 'd', 'f', 'z']
77
78 string2 = ''.join(alpha) # '구분자'.join(열거형객체)
79 print(string2) # abcdfz
80
81 '''
82 "ab#c123d%f$z" -> 전처리 -> abcdfz
83 '''
84
85 # 3. list + 이중 for
86 '''
87 변수 = [실행문 outer for inner for ]
88 '''
89 colors = ['Blue', 'Red']
90 sizes = ['S','M','L']
91
92 choose = [[c, s] for c in colors for s in sizes ]
93 print(choose)
94 # [['Blue', 'S'], ['Blue', 'M'], ['Blue', 'L'], ['Red', 'S'], ['Red', 'M'], ['Red', 'L']]
03.tuple
1 '''
2 tuple 특징
3 - list 자료구조 유사 : index=0
4 형식) 변수 = (값1, 값2)
5 - 순서 존재
6 - 읽기 전용(고속 처리) : 수정 불가
7 '''
8
9 t1 = 10 # 스칼라 변수
10 t2 = (10,) # tuple 변수
11 print(t1, t2) # 10 (10,)
12
13 t3 = (1,2,3,4)
14 print(t3, type(t3))
15 # (1, 2, 3, 4) <class 'tuple'>
16
17 # index 사용(순서 존재)
18 print(t3[:2]) # (1, 2)
19 print(t3[-2:]) # (3, 4)
20
21 # 수정 불가
22 # t3[0] = 'one' Error 발생
23
24 # tuple packing/unpacking
25 pinfo = [('홍길동', 35, (170,65)),
26 ('이순신', 45, (180,95)),
27 ('유관순', 25, (165,45))] # (키,몸무게)
28
29 for name,age,(h,w) in pinfo : # (name,age(h,w))
30 if w > 60 :
31 print(name, age, (h, w))
32 '''
33 홍길동 35 (170, 65)
34 이순신 45 (180, 95)
35 '''
36
37 #####################
38 ### tuple 반환 함수
39 #####################
40
41 # 1. zip()
42 name = ['홍길동', '이순신', '유관순']
43 age = [35,45,25]
44
45 #help(zip)
46 person = list(zip(name, age))
47 print(person) # object info
48 # [('홍길동', 35), ('이순신', 45), ('유관순', 25)]
49
50 print(list(range(5))) # [0, 1, 2, 3, 4]
51
52 sel = [1,2] # 선택자 : 2명
53 person2 = list(zip(sel, name, age))
54 print(person2)
55 # [(1, '홍길동', 35), (2, '이순신', 45)]
56
57 sel = [1,2,3] # 선택자 : 3명
58 person3 = list(zip(sel, name, age))
59 print(person3)
60 # [(1, '홍길동', 35), (2, '이순신', 45), (3, '유관순', 25)]
61
62 # 2. url 파싱
63 from urllib.parse import urlparse, urlunparse
64 # from package.module import class or function
65
66 #help(urlparse)
67
68 url = "http://www.naver.com/index.html?id=hong"
69 url_info = urlparse(url)
70 print(url_info)
71 # ParseResult(scheme='http', netloc='www.naver.com', path='/index.html', params='', query='id=hong', fragment='')
72
73 print('domain name :', url_info.netloc)
74 # domain name : www.naver.com
75
76 url2 = urlunparse(url_info)
77 print(url2) # http://www.naver.com/index.html?id=hong
04.set
1 '''
2 set 특징
3 - 순서 없음(index 사용 불가)
4 - 중복 불가
5 형식) 변수 = {값1, 값2,...}
6 - 집합 개념
7 '''
8
9 s = {1,3,5} # 중복 불가
10 print(s) # {1, 3, 5}
11 print(len(s)) # 3
12
13 # for + set 이용
14 for i in s :
15 print(i, end = ' ') # 1 3 5
16
17 print()
18
19 # 집합 처리
20 s2 = {3, 6}
21 print(s.union(s2)) # 합집합 - {1, 3, 5, 6}
22 print(s.difference(s2)) # 차집합 - {1, 5}
23 print(s.intersection(s2)) # 교집합 - {3}
24
25 # 중복 데이터 처리
26 gender = ['남', '여', '남', '여']
27 sgender = set(gender) # list -> set
28 print(sgender) # {'여', '남'}
29 #print(sgender[1]) # indexing 사용 불가
30
31 # set -> list
32 gender = list(sgender)
33 print(gender) # ['여', '남']
34 print(gender[1]) # 남
35
36 # 원소 추가, 삭제, 수정(x)
37 s3 = {1,3,5,7}
38 print(type(s3)) # <class 'set'>
39
40 s3.add(9) # 원소 추가
41 print(s3) # {1, 3, 5, 7, 9}
42
43 s3.discard(3) # 원소 삭제
44 print(s3) # {1, 5, 7, 9}
05.dict
1 '''
2 dict 특징
3 - set과 유사함
4 형식) 변수 = {key:값1, key:값2, ...}
5 - 순서 없음(index 사용 불가) - random
6 - key을 통해서 값 참조
7 - key 중복 불가(값 중복 가능)
8 '''
9
10 # dict 생성 방법1
11 dic = dict(key1=100, key2=200, key3 = 300)
12 print(dic, type(dic))
13 # {'key1': 100, 'key2': 200, 'key3': 300} <class 'dict'>
14
15 # 방법2
16 dic2 = {'name':'홍길동', 'age':35, 'addr':'서울시'}
17 print(len(dic2)) # 3
18 print(dic2) # {'name': '홍길동', 'age': 35, 'addr': '서울시'}
19
20 # key 이용 참조
21 age = dic2['age']
22 print('age :', age) # age : 35
23
24 # dict에 해당 키 유무 검사
25 print('age' in dic2) # True
26 print('address' in dic2) # False
27
28 # 원소 수정, 삭제, 추가
29 person = dic2
30 print(person) # {'name': '홍길동', 'age': 35, 'addr': '서울시'}
31
32 # 나이 수정
33 person['age'] = 45
34 print(person)
35
36 # 급여 추가
37 person['pay'] = 350
38 print(person)
39 # {'name': '홍길동', 'age': 45, 'addr': '서울시', 'pay': 350}
40
41 # 주소 삭제
42 del person['addr']
43 print(person)
44 {'name': '홍길동', 'age': 45, 'pay': 350}
45
46
47 # for + dict
48 '''
49 for 변수 in 열거형객체(list,tuple,set,dict)
50 '''
51
52 for key in person : # person.keys()
53 print(key)
54
55 '''
56 name
57 age
58 pay
59 '''
60
61 for value in person.values() :
62 print(value)
63 '''
64 홍길동
65 45
66 350
67 '''
68
69 for item in person.items() : # (key,value)
70 print(item)
71 '''
72 ('name', '홍길동')
73 ('age', 45)
74 ('pay', 350)
75 '''
76
77 # key -> value 리턴
78 name = person['name'] # index 형식
79 print(name)
80
81 name = person.get('name') # get()형식
82 print(name)
83
84
85 # {key : [value1, value2]}
86 movie = {'광해' : [9.24, 1200],
87 '공작' : [7.8, 560],
88 '관상' : [8.02, 900]}
89 print(movie)
90 # {'광해': [9.24, 1200], '공작': [7.8, 560], '관상': [8.02, 900]}
91
92 print(len(movie)) # 3
93
94 for m in movie.items() :
95 print(m)
96
97 for title, point in movie.items() :
98 print(title, point)
99 '''
100 (제목, [평점, 관객수])
101 ('광해', [9.24, 1200])
102 ('공작', [7.8, 560])
103 ('관상', [8.02, 900])
104
105 title point
106 광해 [9.24, 1200]
107 공작 [7.8, 560]
108 관상 [8.02, 900]
109 '''
110
111 # 평점이 8이상 영화 출력하기
112 for k, v in movie.items() :
113 # k=title, v=[평점, 관객수]
114 if v[0] >= 8.0 :
115 print(k)
116 '''
117 광해
118 관상
119 '''
120
121 # 문) 평점이 8이상 영화의 누적 관객수 출력하기
122 '''
123 광해
124 관상
125 누적 관객수 = 2,100
126 '''
127 tot = 0 # 초기화
128 for k, v in movie.items() :
129 # k=title, v=[평점, 관객수]
130 if v[0] >= 8.0 :
131 print(k) # 영화 제목 출력
132 tot += v[1] # 관객수 누적
133
134 print('누적 관객수=', format(tot, '3,d'))
135
136
137 # 단어 빈도수 구하기
138 word_set = ['test', 'set', 'list', 'test', 'list']
139 word_count = {} # 빈 set
140
141 for word in word_set : # 'test'
142 # key = value
143 word_count[word] = word_count.get(word, 0) + 1
144
145 print(word_count)
146 # {'test': 2, 'set': 1, 'list': 2}