Python 数据类型
1 什么是数据?
x=10,10是我们要存储的数据
2 为何数据要分不同的类型
数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示
3 数据类型
数字(整形,长整形,浮点型,复数)
字符串
字节串:在介绍字符编码时介绍字节bytes类型
列表
元组
字典
集合
4.数字类型
整型与浮点型
#一:int #作用:年龄,级别,等级,身份证号 x=10 #x=int(10) print(id(x),type(x),x) #二:float #作用:工资,身高,体重 salary=3.1 #salary=float(3.1) print(id(salary),type(salary),salary)
长整型和负数即可
#长整形(了解) 在python2中(python3中没有长整形的概念): >>> num=2L >>> type(num) <type 'long'> #复数(了解) >>> x=1-2j >>> x.real 1.0 >>> x.imag -2.0
5.字符串
#作用:名字,性别,国籍,地址等描述信息 #定义:在单引号\双引号\三引号内,由一串字符组成 name='egon'
优先掌握部分:
按索引取值(正向取+反向取) :只能取
切片(顾头不顾尾,步长)
长度len
成员运算in和not in
移除空白strip
切分split
name='liukuo' print(type(name),id(name)) # 输出 <class 'str'> 2262633911104 按索引取值(正向取) print(name[0]) #按索引取值(反向取) print(name[-1]) print(name[0],type (name[0])) 切片(顾头不顾尾,步长) print(name[0:3]) #输出 liu a='hello world' print(a[1:11]) print(a[1:11:2]) #步长 输出 el ol print(a[::2]) 长度len a='abcdefg' print(len(a)) #输出 7 #成员运算in和not in a='hello world' print('a' in a ) False print('h'in a ) True print('a' not in a ) True print('h'not in a ) False 移除空白strip password=' liukuo123 ' password=password.strip( ) #方法一 print(password) print(password.strip( )) #方法二 输出 liukuo123 切分 split user_info='root:x:0:0:root:/root:/bin/bash' print(user_info[0:4]) 输出 root print(user_info.split(':')[0]) #split是已冒号为分隔符分割 在取第一段 print(user_info.split(':',3)) #输出 ['root', 'x', '0', '0:root:/root:/bin/bash'] cmd='put a.txt' print(cmd.split()) 输出 ['put', 'a.txt'] filepath='put /a/b/c/d/a.txt' print(filepath.split('/ ')) 输出 ['put ', 'a', 'b', 'c', 'd', 'a.txt'] msg='aaaa bbbb cccc dddd eeee ffff' print(msg.split()[0]) # split将字符已空格切成块 输出 aaaa isdigit:用来判断字符是否是由纯数字组成(bytes,unicode) a='123456' print(a.isdigit()) # True b='123456abc' print(b.isdigit()) #False
常用操作:
msg='***liu****' print(msg.strip('*')) #去除所有的*号 print(msg.lstrip('*')) #去除前面的*号 print(msg.rstrip('*')) #去除后面的*号 msg='alex_NB' print(msg.startswith('alex')) #startswith起始,匹配正确则为真True print(msg.endswith('NB')) #endswith止于,匹配正确则为真True msg='aaaa bbbb cccc aaaa bbbb cccc aaaa bbbb cccc ' print(msg.replace('aaaa','AAAA')) #replace替换,将aaaa替换为AAAA 替换次数2次(不加次数全部替换) 输出 AAAA bbbb cccc AAAA bbbb cccc aaaa bbbb cccc 占位符 print('my name is %s my age is %s' %('egon',18)) print('my name is {} my age is {}'.format('egon',18)) print('{1} {0} {1}'.format('egon',18)) print('my name is {x} my age is {y}'.format(y=18,x='egon')) #输出 my name is egon my age is 18 my name is egon my age is 18 18 egon 18 my name is egon my age is 18 split 分解 user_info='root:x:0:0::asdfasdf' l=user_info.split(':') join 加入 print(':'.join(l)) print(''.join(l)) print(' '.join(l)) center,ljust,rjust,zerofill =================egon=================== print('egon'.center(30,'=')) print('egon'.rjust(30,'=')) print('egon'.ljust(30,'=')) print('egon'.zfill(30)) 了解部分 find,rfind,index,rindex,count msg='hello world' print(msg.find('ell'))#从左到右找,如果有,则返回第一个字符的索引 print(msg.find('easdfasdf'))#从左到右找,如果没有,返回-1 print(msg.index('d',0,3))#从左到右找,如果有,则返回第一个字符的索引 print(msg.index('x'))#从左到右找,如果有,则返回第一个字符的索引 print(msg.count('l',0,4)) print(msg.count('l',0,3)) msg='abc\tdeft' print(msg.expandtabs(3)) msg='alex Say hello' print(msg.capitalize()) print(msg.upper()) print(msg.lower()) print(msg.title()) print(msg.swapcase()) is系列 msg='Alex Say Hello' print(msg.isupper()) print(msg.islower()) print(msg.istitle()) msg='asasdf123' print(msg.isalnum()) #字符串是由字母或数字组成 msg='asdfasdf' print(msg.isalpha()) msg=' 1' print(msg.isspace()) msg='aaaai fabc' print(msg.isidentifier()) 判断数字 age=10 inp=input('>>: ').strip() if inp.isdigit(): inp=int(inp) if inp > age: print('ok') else: print('必须输入数字') num1=b'4' #bytes num2=u'4' #unicode,python3中无需加u就是unicode num3='四' #中文数字 num4='壹' num5='Ⅳ' #罗马数字 bytes,unicode print(num1.isdigit()) print(num2.isdigit()) print(num3.isdigit()) print(num4.isdigit()) print(num5.isdigit()) unicode print(num2.isdecimal()) print(num3.isdecimal()) print(num4.isdecimal()) print(num5.isdecimal()) unicode,汉字,罗马 print(num2.isnumeric()) print(num3.isnumeric()) print(num4.isnumeric()) print(num5.isnumeric())
6.列表
作用:多个装备,多个爱好,多门课程,多个账号 定义:[]内可以有多个任意类型的值,逗号分隔 a=[ 'aaa',1234,'abcd',5678 ] 优先掌握的操作: 按索引存取值(正向存取+反向存取):即可存也可以取 print(a[0]) # 正向取 print(a[-1]) #反向取 a[0]='bbbb' #存字符串 输出 ['bbbb', 1234, 'abcd', 5678] 切片(顾头不顾尾,步长) print(a[0:3]) #取0到2的字符 print(a[2][0:4:2]) #取第二字段的0到3的字符,步长为2 成员运算in和not in print('aaa' in a ) #判断字符aaa是否在a列表中 print('bbb' not in a ) #判断字符bbb没有在a列表中 长度 print(len(a)) #打印a列表的长度 追加 a.append('liukuo') #在a列表中追加liukuo字符串 输出 ['aaa', 1234, 'abcd', 5678, 'liukuo'] 删除 del a [5] #删除a列表的第四个字段,如果字段不存在会报错 print(a.remove('aaa')) #remove是单纯的删除,不会返回删除的值,并且是按照值去删 b=a.pop(1) #按照索引取删,默认从末尾开始删
常用操作:
a=['aaaa','aaaa','aaaa','bbbb','cccc','dddd',4,5] # a.insert(0,'liu') # insert插入,在列表0字段插入字符串'liu' # a.insert(2,'kuo') #a.extend([1,2,3,4]) #extend扩大,在列表尾部追加 # b=a.count('aaaa') #count,计数,统计字符串出现的次数 #了解 # a.clear( ) # print(a) l=a.copy() print(l) # # my_girl_friends.reverse() # print(my_girl_friends) # l=[3,4,-1,2] # l.sort(reverse=True) # print(l) #练习: #队列:先进先出 #append,pop # l1=[] # l1.append('first') # l1.append('second') # l1.append('third') # # print(l1.pop(0)) # print(l1.pop(0)) # print(l1.pop(0)) #堆栈:先进后出 # l1=[] # l1.append('first') # l1.append('second') # l1.append('third') # # print(l1.pop()) # print(l1.pop()) # print(l1.pop()) # l1=[] # 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))
7.元组
#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读 #定义方式: ages=(10,12,18,33,18) #ages=tuple((10,12,18,33)) print(id(ages),type(ages),ages) #优先掌握的操作: # 按索引取值(正向取+反向取):只能取 # 切片(顾头不顾尾,步长) print(ages[0:2]) # 长度 print(len(ages)) # 成员运算in和not in print(10 in ages) #其他操作: ages=(10,12,18,33,18) print(ages.index(18)) #index 索引,列表中索引个数 print(ages.index(123123123123)) #索引不存在就报错 print(ages.count(18)) #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 # l1=['a','b','c','d','e'] # for item in l1: # print(item) # l2='abcde' # for item in l2: # print(item) # l=('a','b','c','d','e') # for i in range(1,10,2): # print(i) # l1=['a','b','c','d','e'] # for i in range(len(l1)): # print(i,l1[i]) # msg_dic={ # 'apple':10, # 'tesla':100000, # 'mac':3000, # 'lenovo':30000, # 'chicken':10, # } # # goods_l=[] # 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(): # goods_l.append((choice,msg_dic[choice],int(count))) # print(goods_l) #while+else # for i in range(5): # if i == 3:break # print(i) # else: # print('ok')
8.字典
#作用:存多个值,key-value存取,取值速度快 #定义:key必须是不可变类型,value可以是任意类型 d={'a':1} d={0:1} # d={[1,2,3]:1} #列表不能当做字典的key # print(d[0]) info={'name':'liuk','age':18,'sex':'male'} #本质info=dict({....}) #优先掌握的操作: # 按key存取值:可存可取 # print(info['sex']) # info['hobbies']=['read','music','play','sleep','eat'] #将hobbies 作为键值存在字典中 # print(info) #输出 {'name': 'liuk', 'age': 18, 'sex': 'male', 'hobbies': ['read', 'music', 'play', 'sleep', 'eat']} # 长度len # print(len(info)) #长度是键值对 # 成员运算in和not in # print('name' in info ) #只能和键值做成员运算 # 删除 #print(info.pop('name')) #删除键值对 print(info.pop('name1213',' 自定义')) #删除不存在的键值,会报错。在后面加上None解释内容就不报错了 # 键keys(),值values(),键值对items() # print(info.keys()) # print(info.values()) # print(info.items()) # for key in info.keys(): # print(key) # for val in info.values(): # print(val) # for item in info.items(): # print(item[0],item[1])
常用操作:
info={'name':'liuk','age':18,'sex':'male'} print(info['name']) print(info.get('name123',123)) #返回指定键的值,如果值不在字典中返回定义的值 print(info.popitem()) #随机返回并删除字典中的一对键和值(一般删除末尾对) # # # for k,v in info.items(): #k,v=('name', 'egon') # print(k,v) # print(info.setdefault('hobbies',['read','music'])) #有则不改,返回已经有的值,没有则新增,返回新增的值 # print(info) # print(id(info.setdefault('hobbies',[]))) # print(id(info['hobbies'])) l=[] info={'name':'liuk','age':18,'sex':'male',} # if 'hobbies' not in info: # 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) # info.setdefault('hobbies',[]).append('music') # # # {'name': 'egon', 'age': 18, 'sex': 'male', 'hobbies': ['music', ]} # info.setdefault('hobbies',[]).append('read') #['music', ].append('read') # print(info) #了解 # info_new={'a':1,'age':19} # info.update(info_new) # print(info) # dic={'name':None,'age':None,'sex':None,'hobbies':None} # dic1={}.fromkeys(['name','age','hobbies'],None) # print(dic1)
两种赋值的方式:
#补充两种赋值方式: #一:链式赋值 # 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) # x,y,z,a,b=t # print(x,y,z,a,b) # x,_,_,_,b=t # print(x,b) # print(_) # x,*_,b=t # print(x,b) # x,*_='hello' # print(x) # x,y,z={'a':1,'b':2,'c':3} # print(x,y,z)
9.集合
# 作用:去重,关系运算, # 定义: # 1:每个元素必须是不可变类型(可hash,可作为字典的key) # 2:没有重复的元素 # 3:无序 # s={1,2,'a','b','c','d','e','f'} #s=set({1,2,'a'}) # print(type(s),s) # 优先掌握的操作: # 长度len # s={1,2,'a','b','c','d','e','f'} # print(len(s)) # 成员运算in和not in # print('a' in s) # for item in s: # print(item) # | 并集 # s1={1,2,3} # s2={3,4,5} # print(s1 | s2) # & 交集 # print(s1 & s2) # -差集 # print(s1 - s2) # print(s2 - s1) # ^ 对称差集 # s1={1,2,3} # s2={3,4,5} # == # > , >= , <, <= 父集,子集 # s1={1,2,3,4} # s2={3,4,5} # print(len(s1) > len(s2)) # s1={1,2,3,4} # s2={3,4} # print(s1 > s2) # print(s1 >= s2)
常用操作:
#常用操作 s1={1,2,3,'a',4} # print(s1.pop()) #随机删,并返回删除的结果 # s1.remove('a') #单纯地删,不会返回删除的结果,并且如果删除的元素不存在则报错 # s1.remove('asdfasdfa') #单纯地删,不会返回删除的结果 # print(s1) # print(s1.discard('a')) #单纯地删,不会返回删除的结果,并且如果删除的元素不存在返回None,不会报错 # print(s1) # s1.add('b') # print(s1) s1={1,2,3} s2={4,5} # print(s1.isdisjoint(s2)) #如果s1和s2没有交集则返回True #了解 # s1={1,2,3,4} # s2={3,4,5} # | 并集 # print(s1.union(s2)) # & 交集 # print(s1.intersection(s2)) # s1.intersection_update(s2) #s1=s1.intersection(s2) # print(s1) # -差集 # print(s1.difference(s2)) # ^ 对称差集 # print(s1.symmetric_difference(s2)) # == # > , >= , <, <= 父集,子集 # s1={1,2,3,4} # s2={3,4} # print(s1.issuperset(s2)) # print(s2.issubset(s1)) #去重 # l=['a','b',1,'a','a'] # print(list(set(l))) # l=['a','b',1,'a','a'] # l_new=list() # s=set() # for item in l: # if item not in s: # s.add(item) # l_new.append(item) l=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ] l_new=list() s=set() for item in l: res = (item['name'], item['age'], item['sex']) if res not in s: s.add(res) l_new.append(item) print(l_new) #了解:不可变集合 fset=frozenset({1,2,3}) fset.
集合练习:
练习: # pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} # # linuxs={'wupeiqi','oldboy','gangdan'} # # # 1. 求出即报名python又报名linux课程的学员名字集合 # print(pythons & linuxs) # # 2. 求出所有报名的学生名字集合 # print(pythons | linuxs) # # 3. 求出只报名python课程的学员名字 # print(pythons - linuxs) # # 4. 求出没有同时这两门课程的学员名字集合 # print(pythons ^ linuxs)
本文参考 http://www.cnblogs.com/linhaifeng/articles/7133357.html