03.DataStructure

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}

猜你喜欢

转载自www.cnblogs.com/kingboy100/p/10381550.html
03