Python是个啥-第三章数据类型
第三章 数据类型
3.1 整型(integer/int)
3.1.1 整型的长度
- 32位电脑整形的取值范围(-2xx31-----2xx31)
- 64位电脑整形有取值范围(-2xx63~2xx63)
- py2中有:int/long
- py3中有:int (int/long)
3.1.2 整除
py2和py3中整除是不一样。
-
py2:整形做除法运算,是显示整数部分
from __future__ import division #运算前提前加上这句才能显示小数 a=7/2 print(a)
-
py3:整形的除法保留所有
a=7/2 print(a)
3.2 布尔(bool)
布尔值就是用于表示真假。True和False。
其他类型转换成布尔值:
- str
- ...
对于:None / "" / 0 .... -> False,其他都是Ture。
3.3 字符串(str/string)
字符串是写代码中最常见的,python内存中的字符串是按照:unicode 编码存储。对于字符串是不可变。
一般都用‘ ’,“ ”,''' ''',"" ""表示,单引号,双引号,三个单引号,三个双引号.
空字符串写法:
x=''
x=""
x=""""""
x=''''''
3.3.1字符串独有方法
-
upper #大写
v = 'allen' v1 = v.upper() print(v1) #ALLEN v2 = v.isupper() # 判断是否全部是大写 print(v2)
-
lower #小写
v = 'allen' v1 = v.lower() print(v1) v2 = v.islower() # 判断是否全部是小写 print(v2) ############ 了解即可 v = 'ß' v1 = v.casefold() # 将字符串变小写(casefold另一种方法) print(v1) # ss v2 = v.lower() print(v2) # ß
-
isdigit #判断是否是数字
v = '1' # v = '二' # v = '②' v1 = v.isdigit() # '1'-> True; '二'-> False; '②' --> True v2 = v.isdecimal() # '1'-> True; '二'-> False; '②' --> False v3 = v.isnumluciffer() # '1'-> True; '二'-> True; '②' --> True print(v1,v2,v3) # 以后推荐用 isdecimal 判断是否是 10进制的数。 # ############## 应用 ############## v = ['allen','luciffer','tony'] for i in v: print(i) num = input('请输入序号:') if num.isdecimal(): num = int(num) print(v[num]) else: print('你输入的不是数字')
-
strip #去空白 +\t+\n + 指定字符串
na v1 = "allen " print(v1.strip()) v2 = "allen\t" print(v2.strip()) v3 = "allen\n" print(v3.strip()) v1 = "allena" print(v1.rstrip('a')) #去掉指定字符串,右边的a
-
replace ("被替换","替换",1) #替换
'A18me'.replace('18','BC',1) #字符替换
-
开头 / 结尾 startwith/endwith
v1 = "allena" print(v1.startswith('a')) print(v1.endswith('b'))
-
encodde #编码,把字符串转换成二进制
a='中国Abc' print(a.encode('utf-8')) #b'\xe4\xb8\xad\xe5\x9b\xbdAbc'
-
format /format_map#格式化
a='有{0},就是{1}'.format('钱','任性') print(a) a='有{},就是{}'.format('钱','任性') print(a) a='有{a2},就是{a1}'.format(a2='钱',a1='任性') print(a)
-
join #字符串连接
print('+'.join(['1','2','3','4p'])) #列表中的值用+连接 #1+2+3+4p
-
split #以什么转换为列表,
x="print('abc123'.123isprintable())123达特" d=x.split('123') #以123位分隔符,转换字符串位列表 print(d)
3.3.2 字符串其他方法
print(name.count('l')) #查找l的个数
print(name.center(50,"-")) #居中,不足的用-补齐,长度50字符
print(name.endswith('n')) #g end
print(name.expandtabs(tabsize=20)) #tables键转换成20个字符
print(name.find('allen'))#allen是第几个字符
print(name.index('name')) #查找位置
#print('123'.isdigit()) #整数判断
print('abc123'.isalnum())#判断 英文字符和数字,不包含特殊字符
print('abc'.isalpha())#判断纯字符
print('1A'.isdecimal())#判断是不是10进制
print('10'.isdecimal())#判断是不是10进制
print('abc123'.isidentifier())#合法变量判断(标识符)
print('A 1 a'.islower()) #是不是小写
print('My Name Is 12B'.istitle()) #是不是taital类型,首字母大写
print('abc123'.isprintable())#是不是打印设备,tty文件就不是
print('-------------')
name='abcde'
c="_".join(name) #用_拼接name a_b_c_d
print(c)
#print('+'.join(['1','2','3','4p'])) #列表中的值用+连接
print(name.ljust(50,'^'))
print(name.rjust(50,'^')) #凑够50个字符向右打印,不够的字符放在左边用^补齐
print(name.upper()) #字符转换为大写
print(name.lower()) #字符转换为小写
print('-------------')
print('\nzHANG1'.lstrip()) #去掉左边的空格和换行
print('\nzHANG1\n'.rstrip()) #去掉右边的空格和换行
print(' \nzHANG\n '.strip()) #去掉两边的空格和换行
print('-------------')
p=str.maketrans('abcdef','123456')
print('abcdefghijklmnaaaaa'.translate(p)) #将abcdef转换成123456对应的单一字符替换
print('A18me'.replace('18','BC',1)) #字符替换
print('A18m1e'.rfind('1'))#找到最右边的1的下标值
print('A+E+7+1E+9'.split('+')) #字符串转换为列表,并制定以+区分
print('A+E+7+1E+9'.split('E')) #字符串转换为列表,并制定以E区分
print('A+E+7+1E+9a'.swapcase()) #大小写转换
print('aA+e+me7+1E+9io'.title()) #转换为标题格式
print('10E'.zfill(8)) #用0补齐10个字符,16进制用到
3.3.3案例
登录界面中的验证码模拟,输入的内容不区分大小写。
#使用案例:验证码(不区分大小写)
check_out='I7x1' #验证码
flag=True
while flag:
check_in=input('Please inlut code %s:'%check_out) #输入的验证码
if check_in.lower() == check_out.lower():
print("Welcome Login in.")
flag=False
else:
print("Sorry,Please try.") #字符换转换
3.4 列表
list:序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
使用范围:表示多个事物的时候使用。
格式:['user1','user2']
空列写法:
x=[]
x=list[]
3.4.1 列表的独有方法
-
append() 列表最后添加元素
names=[] flags=0 while flags <3: user_input=input('Input your name:') names.append(user_input) flags+=1 print(names)
-
insert() #插入到指定位置
users=['a', 'b', 'c'] users.insert(2,'d') print(users)
-
remove() 删除内容 ,删除元素如果元素不存在则会报错
users=['a', 'b', 'c'] users.remove('c')
-
pop() 删除索引位置
users=['a', 'b', 'c'] users.pop(2) users['a','dda',2,3,4,5,7] users.pop(1) #(索引值) 注意索引值() del users[1] #[索引值] 注意【】
-
clear 清空
-
extend #列表合并
-
删除(数字、字符串、布尔值除外)
-
reverse 反转
-
sort 排序
a=[1,3,19,28,2] a.reverse() # a.sort() print(a)
users=['a', 'b', 'c',['aa','bb','cc'],True,2,3]
u1=users[0]
u2=users[3][0]
u3=users[4]
print(u1,u2,u3)
3.4.2 案例
3.5 元组
特点:Python的元组与列表类似,不同之处在于元组的元素不能修改。
格式:tuple元组使用小括号()
3.5.1 元组独有方法(无)
3.5.2案例
3.6 字典
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
3.6.1字典格式
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
data = {key1 : value1, key2 : value2 }
注意:键必须是唯一的,但值则不必;值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
也可如此创建字典
3.6.2 字典独有方法
- get
info={}
info.get(key) 如果key存在则返回 如果不存在则返回null
info.get(key,'不存在') #如何key不存在赋给默认值'不存在'
- pop
info={'name':'allen','age':23,'sex':'Female',}
info.pop('sex') #pop
print(info)
del info['age'] #del
print(info)
- update(如果有更新,如果没有创建)
info={'name':'allen','age':23,'sex':'Female',}
info['coust']=100 #添加
info.update({'allen':1,'iver':22}) 如果有更新,如果没有创建
print(info)
- keys/values/items
dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }
#字典套字典,字典套列表
dict3={
'name1':"alice",
'name3':{'age':12},
'name2':{
'age':[13,14],
},
}
v1=dict3.keys() #获取keys
v2=dict3.values() #获取values
v3=dict3.items() #获取所有键值对
3.6.3 案例
创建一个购物车,并对购车里面的商品进行增删改查,用字典实现。
#__Author: Playon
#__Date: 2016/3/12 12:05
#-*- coding:utf-8 -*-
product={
'苹果':'6',
'栗子':'25',
'鸡蛋':'2.5',
'花菜':'26',
'phone':'6000',
'pen':'16',
}
def price():
#price change
choice = input('Please input change goods:')
if choice in product:
price_new=input('Please input %s new price:'%choice)
product[choice]=price_new
else:
print('Goods %s do not exist!'%choice )
def goods_add():
#goods add
choice = input('Input new goods name:')
price = input('Input new goods price:')
if choice in product:
print(choice ,'existed')
else:
product[choice]=price
def goods_del():
# goods del
choice = input('Input delete goods:')
if choice in product:
del product[choice]
else:
print('%s not existed!')
while True:
num = 1 #定义商品序号从1开始
for goods in product:
print('\033[1;34;m%s.%s\t\t%s\033[0m'%(num,goods,product[goods])) #按照指定格式打印商品
num +=1
#选择操作类型
choice_plan= input(
"""\033[0;33;m############## 请选择 ################
# a---添加商品选择 a #
# e---编辑商品选择 e #
# d---删除商品选择 d #
# q---退出系统选择 q #
#####################################\033[0m""")
if choice_plan == 'a':
goods_add()
elif choice_plan == 'e':
price()
elif choice_plan == 'd':
goods_del()
elif choice_plan == 'q':
break
else:
print('Choice Error!')
continue
3.7 集合
- 特点:天生去重,无序
- 格式:v={1,2,3,4,5,6} 、 set{}
- 注意事项:
- 不能作为key来存放的类型(列表、字典、集合等可变类型)【unhashable错误】,因为内部会将一个值进行hash计算对应,用于快速查找。
- True和False在列表中对应的是1和0,则true和1不会同时存在。
3.7.1 集合独有方法
-
add 添加
v={1,2,3,4,5,6,7,'allen',(1,2,3,),} v.add('Alice') print(v) #{1, 2, 3, 4, 5, 6, 7, 'allen', 'Alice', (1, 2, 3)}
-
discard 删除
v={1,2,3,4,5,6,7,'allen',} v.discard('allen') print(v) #{1, 2, 3, 4, 5, 6, 7}
-
update 更新
v={1,2,3,4,5,6,7,'allen'} v1={1,'2','Allen',} v.update(v1) v.update('allen') #allen会被拆分 print(v) #{1, 2, 3, 4, 5, 6, 7, '2', 'l', 'e', 'allen', 'a', 'Allen', 'n'}
-
intersection() 交集
-
union() 并集
-
difference() 差集
-
symmetric_difference() 对称差集
3.7.2 案例
集合和列表的查询效率测试:千万级/亿级的数据查询效率比较,有个列表和集合,里面分别存放着0~1亿个元素,任意输入一个数字比较是否是列表或集合的元素,并计算时间
import time
flag=True
while flag:
choice=input('list or set >>') #选择比较的类型,集合或者列表
if choice == 'list':
code=[]
for i in range(100000000): #创建一个100000000元素的列表
code.append(i)
break
elif choice=='set':
code=set()
for i in range(100000000): #创建一个100000000元素的集合
code.add(i)
break
else:
print('input error!')
while True:
check_num=input('Please Input the number of check(0-100000000):') #输入需要比较的数值
if check_num.isdigit():
break
else:
continue
def run_time():
#比较数字是否在code里面
if int(check_num) in code:
print('existed。')
else:
print('null')
def times():
#计算查询的时间
s=time.time()
run_time()
e=time.time()
run_code1=e-s
print('%s run time:%ss'%(check_num,run_code1))
times() #执行时间函数
3.8 数据类型公共方法
-
len ,长度
#字符串 name='luciffer' len(name) #计算长度 #列表 name=['allen','bill','coke','ada'] len(name) #获取长度 #元组 name=('allen','bill','coke','ada') len(name) #获取长度 #字典 dict3={ 'name':'allen', 'age':23, 'sex':'Female', } v3=len(dict3) print(v3) #集合 v={1,2,3,4} print(len(v))
-
索引 ,根据下标获取值
#字符串 v='allen' v1=v[0] # 0 1 2 3 4 5 v1=v[-1] #最右边的下标 -是从右边开始取值-1 -2 -3(注意没有0的事情) #列表 name=['allen','bill','coke','ada'] name1=name[0] print(name1) #元组 name=('allen','bill','coke','ada') name1=name[0] print(name1) #字典 info={'name':'alice','age':'12','school':['cent1','cent2']} print(info['name']) print(info['age']) print(info['school'][0]) #集合(无)
-
切片,截取内容
#字符串 v="Iverson 0allen1" print(v[5:7]) #取on 起始位置到结束位置,列表是取左不取右 所以不取[7] v[1:-1] #取到最后不包含最后一个 v[3:] #取到最后 v[:] #取全部 v[:-1] #从开头取到最后不包含最后一个 #列表 name=['allen','bill','coke','ada'] val= users[0:2] #元组 name=('allen','bill','coke','ada') val= users[0:2] #字典(无) #集合(无)
-
步长,
#字符串 v="123456789" v1=v[::-1] #倒序 v2=v[0::2] #下标0开始一直到最后(不包含最后一个),间隔(步长)是2 print(v1) print(v2) #列表 name=['allen','bill','coke','ada','abc','def'] val1=name[0::2] #步长2 print(val1) #元组 name=('allen','bill','coke','ada','abc','def') val1=name[0::2] #步长2 print(val1) #字典 (无) #集合(无)
-
for循环,
#字符串 x='abcdef' for i in x: print(i) #列表 #整形拼接 “_”拼接 nums = [11, 22, 33, 44] for i in range(0,len(nums)): nums[i]=(str(nums[i])) #int转换为str print("_".join(nums)) #11_22_33_44 #元组 nums = (11, 22, 33, 44) for i in nums: print(i) #11 #22 #33 #44 #字典 dict3={ 'name':'allen', 'age':23, 'sex':'Female', } for i in dict3: print(i) #默认print KEYS #--keys for i in dict3.keys(): print(i) #--values for i in dict3.values(): print(i) #--items for i,x in dict3.items(): print(x,"----->",i) print(len(dict3)) #集合 v={1,2,3,4} for i in v: print(i)
3.9 嵌套
列表嵌套
users=['a', 'b', 'c',['aa','bb','cc'],True,2,3]
u1=users[0]
u2=users[3][0]
u3=users[4]
print(u1,u2,u3)
元组嵌套
users=('a', 'b', 'c',['aa','bb','cc'],True,2,3)
u1=users[0]
u2=users[3][0]
u3=users[4]
print(u1,u2,u3)
字典嵌套
user={1:2,'a':{'name':'alice'},'b':['bb','bbb'],}
for i in user:
print(user[i])
集合嵌套
3.10 数据类型总结
-
int 整形
-
bool 布尔型
-
str 字符串
-
list 列表
-
tuple 元组
-
dict 字典
-
案例1.判断敏感字符(str/list/dict)
#字符串 info='毛东思想' if '毛东四' in info: print('敏感字符') #列表 info = ['毛东四','小学生','李老六'] if '毛东四' in info: print('敏感字符') #字典 info={'k1':'v1','k2':'v2','k3':'v3'} #判断k1是否存在 if 'k1' in info: print("存在") #判断v2是否存在 flag='不存在' for i in info.values(): if i == 'v2': flag='存在' print(flag) #判断k3:v3是否存在 value=info.get('k3') if value=='v3': print('存在')
案例2.综合练习敏感字符
#1.简单版 list=['网红','big','杀人'] #敏感字符 str_in=input('>>:') for i in list: if i in str_in: print('被和谐了') break else: continue #2.进化版 list=['网红','big','杀人'] #敏感字符 flag=True str_in=input('>>:') for i in list: if i in str_in: flag=False break if flag: print(str_in) else: print('被和谐了')