03.DataStructure
01.list
''' list 특징 - 1차원 배열 구조 형식) 변수 = [값1, 값2] - 다양한 자료형 저장 가능 - index 사용=순서 존재 형식) 변수[n] - 값 수정(추가,수정,삭제,삽입) ''' # 1. 단일 list lst = [1,2,3,4,5] print(lst) # [1, 2, 3, 4, 5] lst = list(range(1,6)) print(lst) # [1, 2, 3, 4, 5] for i in lst : print(lst[i-1:]) # [start:] ''' [1, 2, 3, 4, 5] [2, 3, 4, 5] [3, 4, 5] [4, 5] [5] ''' for i in lst : print(lst[:i]) # [:end] ''' [1] [1, 2] [1, 2, 3] [1, 2, 3, 4] [1, 2, 3, 4, 5] ''' # 마지막 5개 자료 x = list(range(1,1001)) print(x[:5]) # 첫 5개 print(x[-5:]) # 마지막 5개 ''' [1, 2, 3, 4, 5] [996, 997, 998, 999, 1000] ''' # 홀수/짝수 단위 index print(x[::2]) # [1, 3, 5, 7, 9, print(x[1::2]) # [2, 4, 6, 8, 10, # 2. 중첩 list ''' 변수 = [ [] ] ''' a = ['a', 'b', 'c'] b = [10, 20, a, True, "string"] print(b) # [10, 20, ['a', 'b', 'c'], True, 'string'] # 중첩 list index print(b[2]) # a - ['a', 'b', 'c'] print(b[2][2]) # c # 3. 추가,수정,삭제,삽입 ''' Object.member() num.appen(),remove(),insert() ''' num = ['one', 'two', 'three', 'four'] print(type(num)) # <class 'list'> # 1) 추가 num.append(5) # 마지막 추가 print(num) # ['one', 'two', 'three', 'four', 5] # 2) 수정[index 이용] num[4] = 'five' print(num) # ['one', 'two', 'three', 'four', 'five'] # 3) 삭제 num.remove('two') print(num) # ['one', 'three', 'four', 'five'] # 4) 삽입 num.insert(0, 'zero') print(num) # ['zero', 'one', 'three', 'four', 'five'] # 4. list 연산 # 1) list 결합 x = [1,2,3,4] y = [1.5, 2.5] z = x + y # new object = 결합 print('z=', z) # z= [1, 2, 3, 4, 1.5, 2.5] # 2) list 확장 x.extend(y) print('x=', x) # x= [1, 2, 3, 4, 1.5, 2.5] : 단일 list # 3) list 추가 x.append(y) print('x=', x) # x= [1, 2, 3, 4, 1.5, 2.5, [1.5, 2.5]] : 중첩 list # 4) 곱셈 lst = [1,2,3,4] result = lst * 2 print(result) # [1, 2, 3, 4, 1, 2, 3, 4] # 각 원소 연산 for i in range(len(lst)) : # 0~3 print(lst[i] * 2) ''' 2 4 6 8 ''' ''' list : 선형대수 연산 불가 -> numpy 형 변환 필요 '''
02.list2
''' 1. 성적처리 2. list + for ''' # 1. 성적처리 hong = [95, 85, 63] lee = [95, 85, 90] kang = [99, 85, 90] # 중첩 list student = [hong, lee, kang] # [[],[],[]] print('국어\t영어\t수학') print('='*20) for score in student : # 학생수 print("%d\t%d\t%d"%(score[0], score[1], score[2])) print('='*20) print('국어\t영어\t수학') print('='*20) for score in student : # 학생수 print("{} {} {}".format(score[0],score[1],score[2])) print('='*20) # 2. list + for ''' 형식1) 변수 = [ 실행문 for 변수 in 열거형객체 ] - 실행순서 : 1. for > 2. 실행문 > 3. 변수 저장 ''' # 영문자/숫자 -> ASCII(기계어) string = "ab#c123d%f$z" help(ord) asc = [ord(ch) for ch in string] # 'a' -> 97 print('ASCII=', asc) # ASCII= [97, 98, 99, 49, 50, 51, 100, 102, 122] # dummy 변수 만들기 : 홀수=0, 짝수=1 x = list(range(1,101)) dummy = [1 if i%2 == 0 else 0 for i in x ] print(dummy) # [0, 1, 0, 1, ...] # 문) string변수를 대상으로 영문자->"영문",숫자->"숫자" 더미 생성 # 힌트: a~z(97~122) dummy2 = ["영문" if ord(ch)>=97 and ord(ch)<=122 else "숫자" for ch in string] print(dummy2) # "abc123dfz" # ['영문', '영문', '영문', '숫자', '숫자', '숫자', '영문', '영문', '영문'] ''' 형식2) 변수 = [ 실행문 for 변수 in 열거형객체 if 조건식] - 실행순서 : 1. for > 2. if > [3. 실행문] > 4. 변수 저장 ''' num = list(range(1,11)) print(num) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] num2 = [n for n in num if n%2 == 0] print(num2) # [2, 4, 6, 8, 10] # 문2) string변수를 대상으로 영문자만 추출하기 alpha = [ch for ch in string if ord(ch)>=97 and ord(ch)<=122] print(alpha) # ['a', 'b', 'c', 'd', 'f', 'z'] string2 = ''.join(alpha) # '구분자'.join(열거형객체) print(string2) # abcdfz ''' "ab#c123d%f$z" -> 전처리 -> abcdfz ''' # 3. list + 이중 for ''' 변수 = [실행문 outer for inner for ] ''' colors = ['Blue', 'Red'] sizes = ['S','M','L'] choose = [[c, s] for c in colors for s in sizes ] print(choose) # [['Blue', 'S'], ['Blue', 'M'], ['Blue', 'L'], ['Red', 'S'], ['Red', 'M'], ['Red', 'L']]
03.tuple
''' tuple 특징 - list 자료구조 유사 : index=0 형식) 변수 = (값1, 값2) - 순서 존재 - 읽기 전용(고속 처리) : 수정 불가 ''' t1 = 10 # 스칼라 변수 t2 = (10,) # tuple 변수 print(t1, t2) # 10 (10,) t3 = (1,2,3,4) print(t3, type(t3)) # (1, 2, 3, 4) <class 'tuple'> # index 사용(순서 존재) print(t3[:2]) # (1, 2) print(t3[-2:]) # (3, 4) # 수정 불가 # t3[0] = 'one' Error 발생 # tuple packing/unpacking pinfo = [('홍길동', 35, (170,65)), ('이순신', 45, (180,95)), ('유관순', 25, (165,45))] # (키,몸무게) for name,age,(h,w) in pinfo : # (name,age(h,w)) if w > 60 : print(name, age, (h, w)) ''' 홍길동 35 (170, 65) 이순신 45 (180, 95) ''' ##################### ### tuple 반환 함수 ##################### # 1. zip() name = ['홍길동', '이순신', '유관순'] age = [35,45,25] #help(zip) person = list(zip(name, age)) print(person) # object info # [('홍길동', 35), ('이순신', 45), ('유관순', 25)] print(list(range(5))) # [0, 1, 2, 3, 4] sel = [1,2] # 선택자 : 2명 person2 = list(zip(sel, name, age)) print(person2) # [(1, '홍길동', 35), (2, '이순신', 45)] sel = [1,2,3] # 선택자 : 3명 person3 = list(zip(sel, name, age)) print(person3) # [(1, '홍길동', 35), (2, '이순신', 45), (3, '유관순', 25)] # 2. url 파싱 from urllib.parse import urlparse, urlunparse # from package.module import class or function #help(urlparse) url = "http://www.naver.com/index.html?id=hong" url_info = urlparse(url) print(url_info) # ParseResult(scheme='http', netloc='www.naver.com', path='/index.html', params='', query='id=hong', fragment='') print('domain name :', url_info.netloc) # domain name : www.naver.com url2 = urlunparse(url_info) print(url2) # http://www.naver.com/index.html?id=hong
04.set
''' set 특징 - 순서 없음(index 사용 불가) - 중복 불가 형식) 변수 = {값1, 값2,...} - 집합 개념 ''' s = {1,3,5} # 중복 불가 print(s) # {1, 3, 5} # for + set 이용 for i in s : print(i, end = ' ') # 1 3 5 print() # 집합 처리 s2 = {3, 6} print(s.union(s2)) # 합집합 - {1, 3, 5, 6} print(s.difference(s2)) # 차집합 - {1, 5} print(s.intersection(s2)) # 교집합 - {3} # 중복 데이터 처리 gender = ['남', '여', '남', '여'] sgender = set(gender) # list -> set print(sgender) # {'여', '남'} #print(sgender[1]) # indexing 사용 불가 # set -> list gender = list(sgender) print(gender) # ['여', '남'] print(gender[1]) # 남 # 원소 추가, 삭제, 수정(x) s3 = {1,3,5,7} print(type(s3)) # <class 'set'> s3.add(9) # 원소 추가 print(s3) # {1, 3, 5, 7, 9} s3.discard(3) # 원소 삭제 print(s3) # {1, 5, 7, 9}
05.dict
''' dict 특징 - set과 유사함 형식) 변수 = {key:값1, key:값2, ...} - 순서 없음(index 사용 불가) - random - key을 통해서 값 참조 - key 중복 불가(값 중복 가능) ''' # dict 생성 방법1 dic = dict(key1=100, key2=200, key3 = 300) print(dic, type(dic)) # {'key1': 100, 'key2': 200, 'key3': 300} <class 'dict'> # 방법2 dic2 = {'name':'홍길동', 'age':35, 'addr':'서울시'} print(dic2) # {'name': '홍길동', 'age': 35, 'addr': '서울시'} # key 이용 참조 age = dic2['age'] print('age :', age) # age : 35 # dict에 해당 키 유무 검사 print('age' in dic2) # True print('address' in dic2) # False # 원소 수정, 삭제, 추가 person = dic2 print(person) # {'name': '홍길동', 'age': 35, 'addr': '서울시'} # 나이 수정 person['age'] = 45 print(person) # 급여 추가 person['pay'] = 350 print(person) # {'name': '홍길동', 'age': 45, 'addr': '서울시', 'pay': 350} # 주소 삭제 del person['addr'] print(person) {'name': '홍길동', 'age': 45, 'pay': 350} # for + dict ''' for 변수 in 열거형객체(list,tuple,set,dict) ''' for key in person : # person.keys() print(key) ''' name age pay ''' for value in person.values() : print(value) ''' 홍길동 45 350 ''' for item in person.items() : # (key,value) print(item) ''' ('name', '홍길동') ('age', 45) ('pay', 350) ''' # key -> value 리턴 name = person['name'] # index 형식 print(name) name = person.get('name') # get()형식 print(name) # {key : [value1, value2]} movie = {'광해' : [9.24, 1200], '공작' : [7.8, 560], '관상' : [8.02, 900]} print(movie) # {'광해': [9.24, 1200], '공작': [7.8, 560], '관상': [8.02, 900]} for m in movie.items() : print(m) for title, point in movie.items() : print(title, point) ''' (제목, [평점, 관객수]) ('광해', [9.24, 1200]) ('공작', [7.8, 560]) ('관상', [8.02, 900]) title point 광해 [9.24, 1200] 공작 [7.8, 560] 관상 [8.02, 900] ''' # 평점이 8이상 영화 출력하기 for k, v in movie.items() : # k=title, v=[평점, 관객수] if v[0] >= 8.0 : print(k) ''' 광해 관상 ''' # 문) 평점이 8이상 영화의 누적 관객수 출력하기 ''' 광해 관상 누적 관객수 = 2,100 ''' tot = 0 # 초기화 for k, v in movie.items() : # k=title, v=[평점, 관객수] if v[0] >= 8.0 : print(k) # 영화 제목 출력 tot += v[1] # 관객수 누적 print('누적 관객수=', format(tot, '3,d')) # 단어 빈도수 구하기 word_set = ['test', 'set', 'list', 'test', 'list'] word_count = {} # 빈 set for word in word_set : # 'test' # key = value word_count[word] = word_count.get(word, 0) + 1 print(word_count) # {'test': 2, 'set': 1, 'list': 2}
03.DataStructure的更多相关文章
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- iOS系列 基础篇 03 探究应用生命周期
iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
- UML大战需求分析——阅读笔记03
读<UML大战需求分析>有感03 状态机图和活动图在样子比较相似,但状态机图是用来为对象的状态及造成状态改变的事件建模.我们大二学习UML统一建模语言状态机图模块时了解到,UML的状态机图 ...
- 2016-1-28 图解HTTP(03)
6.2.5 非HTTP/1.1首部字段 不限于RFC2616中定义的47种首部字段,还有Cookie.Set-Cookie和Content-Disposition等在其他RFC中首部字段 ...
- ReactNative新手学习之路03真机调试
React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...
- 【三石jQuery视频教程】03.创建垂直时间表(Timeline)
视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...
- javascript基础03
javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...
随机推荐
- 【题解】放球游戏A
题目描述 校园里在上活动课,Red和Blue两位小朋友在玩一种游戏,他俩在一排N个格子里,自左到右地轮流放小球,每个格子只能放一个小球.每个人一次只能放1至5个球,最后面对没有空格而不能放球的人为输. ...
- mpvue——页面跳转
两个页面 两个页面的跳转,只是单纯的A->B这种跳转. 组件 直接使用小程序的组件,navigator,里面还有一些其他的参数,大家可以自行翻阅官方文档 <navigator url=&q ...
- Android greenDAO 数据库 简单学习之基本使用
看网上对greenDAO介绍的不错,今天就动手来试一把,看看好不好使. greenDAO 官方网站:http://greendao-orm.com/ 代码托管地址:https://github.com ...
- python list的使用
list列表的常用方法有: #!/usr/bin/env python # -*- coding:utf- -*- #以下方法全在python2..x版本运行,请3.x以上的小伙伴们在print(放入 ...
- Numpy 系列(七)- 常用函数
在了解了 Numpy 的基本运算操作,下面来看下 Numpy常用的函数. 数学运算函数 add(x1,x2 [,out]) 按元素添加参数,等效于 x1 + x2 subtract(x1,x2 ...
- Angular记录(2)
文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...
- Spring Cloud使用样例
Spring Cloud Demo 项目地址:https://github.com/hackyoMa/spring-cloud-demo 组件 基于Spring Boot 2.0.4.Spring C ...
- C#windows服务调试技巧
1.创建项目 2.为了方便调试,设置为控制台程序 3.修改Service1代码 4.修改Main代码 这样当使用-console方式启动时,就是以普通的控制台方式启动,方便调试程序. 5.其它安装之类 ...
- latex beamer 添加页码
导言中加 \setbeamertemplate{footline}[frame number]
- ado.net 之 oracle 数据库
ado.net 操作oracle 数据库 跟操作mssql 的原来基本一样.只是使用不同的命名空间而已.下面举几个例子: 一. C#读取oracle数据库的表格 ///ado.net 读取table ...