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的更多相关文章

  1. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  2. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  3. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  4. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  5. UML大战需求分析——阅读笔记03

    读<UML大战需求分析>有感03 状态机图和活动图在样子比较相似,但状态机图是用来为对象的状态及造成状态改变的事件建模.我们大二学习UML统一建模语言状态机图模块时了解到,UML的状态机图 ...

  6. 2016-1-28 图解HTTP(03)

    6.2.5 非HTTP/1.1首部字段        不限于RFC2616中定义的47种首部字段,还有Cookie.Set-Cookie和Content-Disposition等在其他RFC中首部字段 ...

  7. ReactNative新手学习之路03真机调试

    React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...

  8. 【三石jQuery视频教程】03.创建垂直时间表(Timeline)

    视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...

  9. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

随机推荐

  1. 【题解】放球游戏A

    题目描述 校园里在上活动课,Red和Blue两位小朋友在玩一种游戏,他俩在一排N个格子里,自左到右地轮流放小球,每个格子只能放一个小球.每个人一次只能放1至5个球,最后面对没有空格而不能放球的人为输. ...

  2. mpvue——页面跳转

    两个页面 两个页面的跳转,只是单纯的A->B这种跳转. 组件 直接使用小程序的组件,navigator,里面还有一些其他的参数,大家可以自行翻阅官方文档 <navigator url=&q ...

  3. Android greenDAO 数据库 简单学习之基本使用

    看网上对greenDAO介绍的不错,今天就动手来试一把,看看好不好使. greenDAO 官方网站:http://greendao-orm.com/ 代码托管地址:https://github.com ...

  4. python list的使用

    list列表的常用方法有: #!/usr/bin/env python # -*- coding:utf- -*- #以下方法全在python2..x版本运行,请3.x以上的小伙伴们在print(放入 ...

  5. Numpy 系列(七)- 常用函数

    在了解了 Numpy 的基本运算操作,下面来看下 Numpy常用的函数.     数学运算函数 add(x1,x2 [,out]) 按元素添加参数,等效于 x1 + x2 subtract(x1,x2 ...

  6. Angular记录(2)

    文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...

  7. Spring Cloud使用样例

    Spring Cloud Demo 项目地址:https://github.com/hackyoMa/spring-cloud-demo 组件 基于Spring Boot 2.0.4.Spring C ...

  8. C#windows服务调试技巧

    1.创建项目 2.为了方便调试,设置为控制台程序 3.修改Service1代码 4.修改Main代码 这样当使用-console方式启动时,就是以普通的控制台方式启动,方便调试程序. 5.其它安装之类 ...

  9. latex beamer 添加页码

    导言中加 \setbeamertemplate{footline}[frame number]

  10. ado.net 之 oracle 数据库

    ado.net 操作oracle 数据库 跟操作mssql 的原来基本一样.只是使用不同的命名空间而已.下面举几个例子: 一. C#读取oracle数据库的表格 ///ado.net 读取table ...