一、数据
1、什么是数据?
x=10,10是我们要存储的数据。
2、为何数据要分不同的类型?
数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示。
3、 数据类型
数字(整形,长整形,浮点型,复数)
字符串
列表
元组
字典
集合
学习方法:
#一:基本使用
用途
定义方式
常用操作+内置的方法
#二:该类型总结
存一个值or存多个值
只能存一个值
可以存多个值,值都可以是什么类型
有序or无序
可变(id的基础上)or不可变
!!!可变:值变,id不变。可变==不可hash
!!!不可变:值变,id就变。不可变==可hash
4、数字(int,float,complex)
作用:年纪,等级,薪资,身份证号,qq号等数字相关
定义:
age=10 #本质age=int(10)
salary=3000.3 #本质salary=float(3000.3)
二进制,十进制,八进制,十六进制
长整形(了解)
在python2中(python3中没有长整形的概念):
>>> num=2L
>>> type(num)
<type 'long'>
复数(了解)
>>> x=1-2j
>>> x.real
1.0
>>> x.imag
-2.0
#一、int #作用:年龄、级别、等级、身份证号 # x=10 #x=int(10) # print(id(x),type(x),x) #二、float #浮点型float #作用:薪资,身高,体重,体质参数等浮点数相关 #salary=3000.3 #本质salary=float(3000.3)
5、字符串
作用:名字,性别,国籍,地址等描述信息
定义:在单引号\双引号\三引号内,由一串字符组成
name='egon'
常用操作:
移除空白strip
切分split
长度len
索引
切片
其他操作(包括常用)
#用途:描述性,记录名字、性别等 # name='egon' #name=str('egon') # print(id(name),type(name),name) #优先掌握的操作: # 按索引取值(正向取+反向取) :只能取 print(name[0],type(name[0])) print(name[-2]) name[0]='E'#字符串类型不能这样取 # 切片(顾头不顾尾,步长) print(name[1:3]) msg='hello world' print(msg[1:7]) print(msg[1:7:2])#隔一个取一个 msg='abcdefg' # print(msg[1:6]) # print(msg[1:6:2])#bdf # print(msg[:])#全取 # print(msg[::2])#aceg # print(msg[5:0:-1])#fedcb # print(msg[6::-1])#gfedcba # # 长度len # x=10 # print(len(x)) #数字没有长度 # msg='abc' # print(len(msg))#len为3 # 成员运算in和not in #msg='hello alex' print('a' in msg) print('alex' in msg) print('ae' in msg)#必须连续匹配 # 移除空白strip(移除空白的方法) # password='alex3724 ' # password=password.strip() # print(password) # print(password.strip()) # msg='***egon******' #取出‘*’ # print(msg.strip('*')) # 切分split # user_info='root:x:0:0::/root:/bin/bash' # print(user_info[0:4]) # print(user_info.split(';',1)) # cmd='put a.txt' # print(cmd.split())#默认按照空格切 ['put', 'a.txt'] # filepath='/a/b/c/a.txt' # print(filepath.split('/',1))#['', 'a/b/c/a.txt'] # print(filepath.split('',1))#['', 'a/b/c/a.txt'] # msg='alex say is have' # print(msg.split(maxsplit=1)[0]) # msg='***alex****' # print(msg.strip('*')) # print(msg.lstrip('*')) # print(msg.rstrip('*')) #startswith,endswith # name='alex_SB' # print(name.endswith('SB')) #以什么结尾 # print(name.startswith('alex'))#以什么开始 #replace # name='alex say :i have one tesla,my name is alex' # print(name.replace('alex','SB',1))(1:替换的次数) #format的三种玩法 不在依赖位置去传值 # res='{} {} {}'.format('egon',18,'male') # res='{1} {0} {1}'.format('egon',18,'male') # res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)\ # print('my name is %s my age is %s' %('egon',18)) # print('my name is {} my age is {}'.format('egon',18)) # print('my name is {x} my age is {y}'.format(x='egon',y=18))#不在依赖位置去传值 #find,rfind,index,rindex,count 查找是否存在子字符串 # msg='hello world' # print(msg.find('d'))#从左到右找,如果有,则返回第一个字符的索引 # print(msg.find('ell')) # print(msg.find('adadada'))#从左到右找,如果没有,返回-1 # print(msg.index('d'))#从左到右找,如果有,则返回第一个字符的索引 # print(msg.index('x'))#从左到右找,如果有,则返回第一个字符的索引 # print(msg.count('l',0,4))#0开始,4结束,重复2次 # print(msg.count('l',0,4))#0开始,3结束 #split # name='root:x:0:0::/root:/bin/bash' # print(name.split(':')) #默认分隔符为空格 # name='C:/a/b/c/d.txt' #只想拿到顶级目录 # print(name.split('/',1)) # name='a|b|c' # print(name.rsplit('|',1)) #从右开始切分 #join # tag=' ' # print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串 #center,ljust,rjust,zerofill #============egon============= # print('egon'.center(30,'='))#宽度为30,填充物为‘=’ # print('egon'.rjust(30,'='))#宽度为30,填充物为‘=’右对齐 # print('egon'.ljust(30,'='))#宽度为30,填充物为‘=’左对齐 # print('egon'.zfill(30))#宽度为30,填充物为‘=’ #is 系列 #判断数字 age=10 inp=input('>>:'.strip()) if inp.isdigit():##判断字符是否为数字 if inp > age: print('ok') else: print('输入数字') # num1=b'4' #bytes # num2=u'4' #unicode,python3中无需加u就是unicode # num3='四' #中文数字 # num4='Ⅳ' #罗马数字 # print(msg.isdigit()) #只能判断bytes、unicode类型 # print(msg.isdecimal())#只能判断unicode # print(msg.isnumeric())#unicode、汉字、罗马 其它: #strip name='*egon**' print(name.strip('*')) print(name.lstrip('*')) print(name.rstrip('*')) #startswith,endswith name='alex_SB' print(name.endswith('SB')) print(name.startswith('alex')) #replace name='alex say :i have one tesla,my name is alex' print(name.replace('alex','SB',1)) #format的三种玩法 res='{} {} {}'.format('egon',18,'male') res='{1} {0} {1}'.format('egon',18,'male') res='{name} {age} {sex}'.format(sex='male',name='egon',age=18) #find,rfind,index,rindex,count name='egon say hello' print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引 # print(name.index('e',2,4)) #同上,但是找不到会报错 print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有 #split name='root:x:0:0::/root:/bin/bash' print(name.split(':')) #默认分隔符为空格 name='C:/a/b/c/d.txt' #只想拿到顶级目录 print(name.split('/',1)) name='a|b|c' print(name.rsplit('|',1)) #从右开始切分 #join tag=' ' print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串 #center,ljust,rjust,zfill name='egon' print(name.center(30,'-')) print(name.ljust(30,'*')) print(name.rjust(30,'*')) print(name.zfill(50)) #用0填充 #expandtabs name='egon\thello' print(name) print(name.expandtabs(1)) #lower,upper name='egon' print(name.lower()) print(name.upper()) #captalize,swapcase,title print(name.capitalize()) #首字母大写 print(name.swapcase()) #大小写翻转 msg='egon say hi' print(msg.title()) #每个单词的首字母大写 #is数字系列 #在python3中 num1=b'4' #bytes num2=u'4' #unicode,python3中无需加u就是unicode num3='四' #中文数字 num4='Ⅳ' #罗马数字 #isdigt:bytes,unicode print(num1.isdigit()) #True print(num2.isdigit()) #True print(num3.isdigit()) #False print(num4.isdigit()) #False #isdecimal:uncicode #bytes类型无isdecimal方法 print(num2.isdecimal()) #True print(num3.isdecimal()) #False print(num4.isdecimal()) #False #isnumberic:unicode,中文数字,罗马数字 #bytes类型无isnumberic方法 print(num2.isnumeric()) #True print(num3.isnumeric()) #True print(num4.isnumeric()) #True #三者不能判断浮点数 num5='4.3' print(num5.isdigit()) print(num5.isdecimal()) print(num5.isnumeric()) ''' 总结: 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景 如果要判断中文数字或罗马数字,则需要用到isnumeric ''' #is其他 print('===>') name='egon123' print(name.isalnum()) #字符串由字母或数字组成 print(name.isalpha()) #字符串只由字母组成 print(name.isidentifier()) print(name.islower()) print(name.isupper()) print(name.isspace()) print(name.istitle())
6、列表
作用:多个装备,多个爱好,多门课程,多个女朋友等
定义:[]内可以有多个任意类型的值,逗号分隔
my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])
或
l=list('abc')
常用操作:
索引
切片
追加
删除
长度
循环
包含in
# 作用:多个装备,多个爱好,多门课程,多个女朋友等 # #定义:[]内可以有多个任意类型的值,逗号分隔 # my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...]) # #优先掌握的操作: # 按索引存取值(正向存取+反向存取):即可存也可以取 # print(my_girl_friends[2]) # print(my_girl_friends[-1]) #print(id(my_girl_friends)) # my_girl_friends[0]='sb' #print(id(my_girl_friends)) # print(my_girl_friends) #id 是一致的,可变 # 切片(顾头不顾尾,步长) # print(my_girl_friends[1:5:2]) # 长度 #print(len(my_girl_friends)) # 成员运算in和not in # print('alex' in my_girl_friends) # print(5 in my_girl_friends) # 追加 # my_girl_friends.append('6号') # print(my_girl_friends) # 删除 # del my_girl_friends[2] #通用删除列表内部 # print(my_girl_friends.remove('6号')) #指定删除的元素,remove是单纯的删除,不会删除返回的值,并且是按照值去删除 # print(my_girl_friends) # my_girl_friends.pop()#按照索引去删除,默认从末尾开始删 # res=my_girl_friends.pop(1) # print(my_girl_friends) # print(res) # 循环 #其他操作 # my_girl_friends=['alex','wupeiqi','alex',''yuanhao',4,5] #本质my_girl_friends=list([...]) #常用操作: # my_girl_friends.insert(0,'ce')#插入一个值 # my_girl_friends.extend([1,2,3])#以列表的形式,添加到原始列表的末尾 # print(my_girl_friends.count('alex'))#统计个数 # print(my_girl_friends) # my_girl_friends.clear() # my_girl_friends.copy() # my_girl_friends.extend() # my_girl_friends.insert() # my_girl_friends.sort()#排序 # my_girl_friends.reverse()#反转 # 练习: # 队列:先进先出 # append,pop # l1=['four'] # l1.append('first') # l1.append('second') # l1.append('third') # print(l1) # print(l1.pop(1)) # print(l1.pop(1)) # print(l1.pop(1)) # print(l1) # 堆栈:先进后出 # l1=['four'] # l1.insert(0,'first') # l1.insert(0,'second') # l1.insert(0,'third') # print(l1) # print(l1.pop(0)) # print(l1.pop(0)) # print(l1.pop(0)) # print(l1) #ps:反向步长 l=[1,2,3,4,5,6] #正向步长 l[0:3:1] #[1, 2, 3] #反向步长 l[2::-1] #[3, 2, 1] #列表翻转 l[::-1] #[6, 5, 4, 3, 2, 1]
7、元组
作用:存多个值,对比列表来说,元组不可变,主要是用来读
定义:与列表类型,只不过[]换成()
可以当做字典的key
age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))
常用操作:
索引
切片
循环
长度
包含in
# 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读 # ages=(10,12,18,33) #ages=tuple((10,12,18,33)) # print(id(ages),type(ages),ages) #列表可以改,元组不可以改。元组的目的是为了查询,能存能取用列表 #定义:与列表类型比,只不过[]换成() # age=(11,22,33,44,55)#本质age=tuple((11,22,33,44,55)) #优先掌握的操作: # 按索引取值(正向取+反向取):只能取 # 切片(顾头不顾尾,步长) # print(age[0:2]) # 长度 # 成员运算in和not in # print(10 in age) # age=(11,18,22,33,44,55) # print(age.index(18))#值的次数 # age.count() # l=['a','b','c','d','e'] # l='abcde' # l=('a','b','c','d','e') 仅限这三种依赖索引 # index=0 # while index < len(l): # print(l[index]) # index+=1 # l=['a','b','c','d','e'] # for item in l # print(item) # # 循环 # msg_dic={ # 'apple':10, # 'tesla':100000, # 'mac':3000, # 'lenovo':30000, # 'chicken':10, # } #对于字典来说,in是以key为依据的 # for key in msg_dic: # print(key,msg_dic[key]) # for i in range(1,10,2): # print(i) # msg_dic={ # 'apple':10, # 'tesla':100000, # 'mac':3000, # 'lenovo':30000, # 'chicken':10, # } # # market=[] # while True: # for key in msg_dic: # print(key,msg_dic[key]) # choice = input('商品名:').strip() # if choice not in msg_dic:continue # count = input('个数:').strip() # if count.isdigit(): # market.append((choice,msg_dic[choice],int(count))) # # print(market) for i in range(5): if i == 3:break else: print('ok')
8、字典
作用:存多个值,key-value存取,取值速度快
定义:key必须是不可变类型,value可以是任意类型
info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....})
或
info=dict(name='egon',age=18,sex='male')
或
info=dict([['name','egon'],('age',18)])
或
{}.fromkeys(('name','age','sex'),None)
常用操作:
存/取
删除
键s,值s,键值对
长度
循环
包含in
#作用:存多个值,key-value存取,取值速度快,占空间更多# (建立新的映射关系) # 设计结构的目的是为了方便存取 #定义:key必须是不可变类型(字符串、数字、元组),value可以是任意类型 # info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....}) # 或 # info=dict(name='egon',age=18,sex='male') # 或 # info=dict([['name','egon'],('age',18)]) # 或 # {}.fromkeys(('name','age','sex'),None) #优先掌握的操作: # 按key存取值:可存可取 # info={'name':'egon','age':18,'sex':'male'} # print(info['sex']) # info['hobbis']=['read','music'] # print(info) # 长度len # print(len(info)) # 成员运算in和not in # # # 删除 # print(info.pop('name'))#egon # print(info.pop('name123','None')) # 键keys(),值values(),键值对items() # print(info.keys()) #取出所有的key,dict_keys(['name', 'age', 'sex']) 不是列表类型 # print(info.values())#只取值 # print(info.items())#dict_items([('name', 'egon'), ('age', 18), ('sex', 'male')]),以元组的方式存储 # for item in info.items(): # print(item[0],item) # 循环 #其他用法 info={'name':'egon','age':18,'sex':'male'} # info.fromkeys() # print(info.get('name123',123)) # print(info.popitem()) # for k,v in info.items(): # print(k,v) # info_new={'a':1,'age':19}#更新 # info.update(info_new) # print(info) # dic={}.fromkeys(['name','age','hobbiex'],None)#快速生成字典 # print(dic) # for i in info.items(): # print(i[0]) # 两种赋值方式: # 一、链式赋值 # x=10 # y=x # x=y=z=10 # print(id(x),id(y),id(z)) #交换两个变量的值 # m=10 # n=20 # temp=n # n=m #n=10 # m=temp # print(m,n) # m,n=n,m # print(m,n) # 二、从一个数据类型中解压出我们想要的值 t=(10.3,11.2,12.1,14.3,3.1) #元组 # s1=t[0] # s2=t[1] # s3=t[2] # print(s1) # x,_,_,_,b=t#'_'代表一个占位符 # x,*_,b=t # print(x,b) # print(_)#14.3 # name='hello' # x,*_=name #字符串 # print(x) # x,y={'a':1,'b':2,'c':3}#字典 # print(x,y,z)#只取key # l=['zzz','xxx','ccc']#列表 # x,*_,b=l # print(x,b) # info.setdefault()#设置默认值 # info.setdefault('age',19)#如果字典中存在这个key了,则不修改,(有则不改,返回旧的值,没有则返回新增的值) # print(info) info={'name':'egon','age':18,'sex':'male'} # if 'hobbies' not in info: ###替代了setdefault # info['hobbies']=[] # info['hobbies'].append('music') # else: # info['hobbies'].append('read') # if 'hobbies' not in info: # info['hobbies']=[] # info['hobbies'].append('music') # else: # info['hobbies'].append('read') # print(info) # print(id(info.setdefault('hobbies',[]))) # print(id(info['hobbies'])) # info.setdefault('hobbies',[]).append('music') # info.setdefault('hobbies',[]).append('read')#{'name': 'egon', 'age': 18, 'sex': 'male', 'hobbies': ['music', 'read']} # print(info) # info.popitem() # info.update()
9、集合
作用:去重,关系运算,
定义:
知识点回顾
可变类型是不可hash类型
不可变类型是可hash类型
定义集合:集合:可以包含多个元素,用逗号分割,
集合的元素遵循三个原则:
1:每个元素必须是不可变类型(可hash,可作为字典的key)
2:没有重复的元素
3:无序
注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
常用方法:
in 和 not in
|合集
&交集
-差集
^对称差集
==
>,>= ,<,<= 父集,子集
# 作用:去重,关系运算, # 定义: # 知识点回顾 # 可变类型是不可hash类型 # 不可变类型是可hash类型 # s={1,2,'a','a'}#s=set({1,2,'a'}) # print((type(s),s)) # 定义集合: # 集合:可以包含多个元素,用逗号分割, # 集合的元素遵循三个原则: # 1:每个元素必须是不可变类型(可hash,可作为字典的key) # 2: 没有重复的元素 # 3:无序 #意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 # 优先掌握的操作: # s={1,2,'a','b','c','d'} # 长度len # print(len(s)) # 成员运算in和not in # for item in s: # print(item) # # | 合集(并集) # s1={1,2,3} # s2={3,4,5} # print(s1 | s2) # & 交集 # s1={1,2,3} # s2={3,4,5} # print(s1 & s2) # -差集 # s1={1,2,3} # s2={3,4,5} # print(s1 - s2) # ^ 对称差集 取共有部分之外的部分,没有同时存在在这个集合的值 # s1={1,2,3} # s2={3,4,5} # 3 # == # > , >= , <, <= 父集,子集 # 一.关系运算 # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合 # pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} # linuxs={'wupeiqi','oldboy','gangdan'} # 1. 求出即报名python又报名linux课程的学员名字集合 # 2. 求出所有报名的学生名字集合 # 3. 求出只报名python课程的学员名字 # 4. 求出没有同时这两门课程的学员名字集合 # pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} # linuxs={'wupeiqi','oldboy','gangdan'} # # print(pythons&linuxs) # print(pythons|linuxs) # print(pythons-linuxs) # print(pythons^linuxs) #其他方法 s1={1,2,3,4} s2={3,4,5} # | # print(s1.union(s2)) # & # print(s1.intersection(s2)) # print(s1.intersection_update(s2)#s1=s1.intersection(s2) # - # print(s1.difference(s2)) # ^ # print(s1.symmetric_difference(s2)) # == # >,>= <,<= # print(s1.issubset(s2)) # print(s2.issuperset(s=2)) # s1.pop()#随机删,并返回删除的结果 # s1.discard()#单纯的删除,不会返回删除的结果,如果删除的元素不存在,不会报错 # s1.remove()#指定元素删除,单纯的删除,不会返回删除的结果,并且删除的元素不存在,会报错 # # # s1.add()#添加值,无序 # s1.isdisjoint()#如果s1和s2没有交集,返回true #去重 # l=['a','b','c','a'] # print(list(set(l))) # l=['a','b','c','a'] # l_new=list() # s=set() # for item in l: # if item not in s: # s.add(item) # l_new.append(item) # print(item) # 了解 # frozenset;不可变集合 # 容器类型:列表、字典、集合
10、数据类型总结
按存值个数区分
标量/原子类型 | 数字,字符串 |
容器类型 | 列表,元组,字典 |
按可变不可变区分
可变 | 列表,字典 |
不可变 | 数字,字符串,元组 |
按访问顺序区分
直接访问 | 数字 |
顺序访问(序列类型) | 字符串,列表,元组 |
key值访问(映射类型) | 字典 |
11、运算符
成员运算(in ,not in)
身份运算(is ,is not)
详细:http://www.cnblogs.com/linhaifeng/articles/5935801.html#_label34
12、字符编码
http://www.cnblogs.com/linhaifeng/articles/5950339.html
13、文件处理
http://www.cnblogs.com/linhaifeng/articles/5984922.html
练习:
1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
apple 10 3 tesla 100000 1 mac 3000 2 lenovo 30000 3 chicken 10 3
2. 修改文件内容,把文件中的alex都替换成SB
文件内容全部来源于http://www.cnblogs.com/linhaifeng/articles/7133357.html 海峰老师