一、什么是数据类型
我们人类可以容易的分辨出来数字和字符,但是计算机不行。计算机必须明确告诉他“1”是数字,“字”是字符,否则他是分不清1和字的区别。所以每个编程语言都会对各种数据类型进行区分。
int:整数型,主要用于计算。
bool:判断真假,True、Flase。
str:简单少量的数据存储,并可以进行操作。
tuple,只读,不能更改。(1,wang)
list:列表大量有序数据[1,’dfd’,True,[1,13,2],{‘name’:’wang’}]
dict:字典,存放大量数据,且关联较强的数据{‘name’:’wang’,’age’:12,’name-list’:[‘张三’,’李四’]}
二、基础数据类型
2.1、int整形
int作为常见的数据类型,主要用于运算。常见的加减乘除,这个没啥好说的,我们主要看一下十进制和二进制之间的转换
2.1.1、十进制转换为二进制
十进制整数转换为二进制采用“除2取余,逆序排列”法。
十进制小数转换为二进制采用“乘2取整,顺序排列”法。
2.1.2、二进制转换为十进制
要从右到左用二进制的每个数去乘以2的相应次方,小数点后则是从左往右。
2.1.3、int操作方法
除了加减乘除,int还有可以计算二进制长度
num = 10
print(num.bit_length())
2.2、布尔值bool
布尔值只有两种:True、False。
# int ---> bool
i=-10
while i<10:
print (i,bool(i))
i+=1
#只有0才是false
# bool ---> int
t = True
print(int(t)) # 1 True --> 1
t = False
print(int(t)) # 0 False --> 0
# int ---> str
i1 = 100
print(str(i1)) # '100'
# str ---> int # 全部由数字组成的字符串才可以转化成数字
s1 = '90'
print(int(s1)) # 90
# str ---> bool
s1 = 'wangld'
s2 = ''
print(bool(s1)) # True 非空即True
print(bool(s2)) # False
# bool ---> str
t1 = True
print(str(True)) # 'True'
2.3、字符串str
2.3.1、字符串的索引与切片
组成字符串的字符从左至右,依次排列,以0开头,依次报数。
i = 'ABCDEFGHJKLMN'
print(i[0],i[2],i[3],i[6],i[8],i[9])
print(i[0:3],i[2:5],i[3:],i[0:-1],i[-1:-5:-1])
2.3.2、字符串的其他操作方式
i = 'ABCAEFGHJKAMN'
ret = i.count("A",1,6) # 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数,beg,end可为空
print(ret)
a4 = "dkfjdkfasf54"
startswith 判断是否以…开头
endswith 判断是否以…结尾
ret4 = a4.endswith('jdk',3,6) # 顾头不顾腚
print(ret4) # 返回的是布尔值
ret5 = a4.startswith("kfj",1,4)
print(ret5)
split 以什么分割,最终形成一个列表此列表不含有这个分割的元素。
ret9 = 'title,Tilte,atre,'.split('t')
print(ret9)
ret91 = 'title,Tilte,atre,'.rsplit('t',1)
print(ret91)
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)
strip
name='barry' print(name.strip(''))
print(name.lstrip('')) print(name.rstrip(''))
replace
name='alex say :i have one tesla,my name is alex'
print(name.replace('alex','SB',1))
is系列
name='taibai123'
print(name.isalnum()) #字符串由字母或数字组成
print(name.isalpha()) #字符串只由字母组成
print(name.isdecimal()) #字符串只由十进制组成
#######下面这些方法在数据类型补充时会讲到,现在不讲
寻找字符串中的元素是否存在
ret6 = a4.find("fjdk",1,6)
print(ret6) # 返回的找到的元素的索引,如果找不到返回-1
ret61 = a4.index("fjdk",4,6)
print(ret61) # 返回的找到的元素的索引,找不到报错。
captalize,swapcase,title
print(name.capitalize()) #首字母大写
print(name.swapcase()) #大小写翻转
msg='taibai say hi'
print(msg.title()) #每个单词的首字母大写
内同居中,总长度,空白处填充
ret2 = a1.center(20,"*")
print(ret2)
2.4、列表
列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型.比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用’ , ‘隔开而且可以存放各种数据类型: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:
li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]
列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。
2.4.1、列表的创建
# 创建一个列表有三种方式:
# 方式一:(常用)
l1 = [1, 2, '太白']
# 方式二:(不常用)
l1 = list() # 空列表
# l1 = list(iterable) # 可迭代对象
l1 = list('123')
print(l1) # ['1', '2', '3']
# 方式三:列表推导式(后面的课程会讲到)
l1 = [i for i in range(1,5)]
print(l1) # [1, 2, 3, 4]
2.4.2、列表的查
li = [1, 3, 2, "a", 4, "b", 5,"c"]
print(li)
l1 = li[0:3]
print(l1)
l2 = li[3:6]
print(l2)
l3 = li[1:7:2]
print(l3)
l4 = li[-3::-2]
print(l4)li = [1, 3, 2, "a", 4, "b", 5,"c"]
#按照索引查
l1 = li[1]
print(l1)
#按照切片查
l2 = li[3:6]
print(l2)
#按照切片+步长查
l3 = li[1:7:2]
print(l3)
l4 = li[-3::-2]
print(l4)
#按照FOR循环来查
for i in li:
print(i)li = [1, 3, 2, "a", 4, "b", 5,"c"]
print(li)
l1 = li[0:3]
print(l1)
l2 = li[3:6]
print(l2)
l3 = li[1:7:2]
print(l3)
l4 = li[-3::-2]
print(l4)
2.4.3、列表的增加
li = [1, 3, 2, "a", 4, "b", 5,"c"]
li.append('l5')
print(li)
li.insert(1,'12')
print(li)
li.extend(['123','432'])
print(li)
2.4.4、列表的删除
# pop 通过索引删除列表中对应的元素,该方法有返回值,返回值为删除的元素
li = [1, 3, 2, "a", 4, "b", 5,"c"]
ret = li.pop()
print (ret,li)
# remove 通过元素删除列表中该元素
li.remove(5)
print(li)
#按照索引删除该元素
del li[2]
print(li)
# 切片删除该元素
del li[5:]
print(li)
# 切片(步长)删除该元素
del li[::2]
print(li)
# clear 清空列表
li.clear()
print(li)
2.4.5、列表的修改
li = [1, 3, 2, "a", 4, "b", 5,"c"]
#按照索引改值
li[0] = '木子'
#['木子', 3, 2, 'a', 4, 'b', 5, 'c']
print(li)
#按照切片改值(迭代增加)
li[1:3] = 'abcd'
print(li)
#['木子', 'a', 'b', 'c', 'd', 'a', 4, 'b', 5, 'c']
# 按照切片(步长)改值(必须一一对应)
li[0:8:2] = '一二三四'
print(li)
#['一', 'a', '二', 'c', '三', 'a', '四', 'b', 5, 'c']
2.4.6、列表的其他方法
li = [1, 3, 2, "a", 4, "b", 5,"c"]
#查询列表的元素个数
print(len(li)) #8
#某个元素出现的次数
print(li.count(3)) #1
#通过元素来找索引
print(li.index('a')) #3
#列表的排序
li2 = [1, 3, 6, 9, 2, 4, 5, 7, 8, 10]
li2.sort()
print(li2) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#从大到小进行排序
li2.sort(reverse=True)
print(li2)#[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
#列表的翻转
li2.reverse()
print(li2)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2.4.7列表的嵌套
l3 = ['alex', 'wusir', ['taibai', 99, 'ritian'], 20]
#1、找到alex的e元素
s1 = l3[0]
print(s1[2])#e
print(l3[0][2])#e
#将wusir 变成大写
l3[1]=l3[1].upper()
print(l3) #['alex', 'WUSIR', ['taibai', 99, 'ritian'], 20]
# 3, 给此列表['taibai',99,'ritian'] 追加一个元素,'文周'
l3[2].append('文周')
print(l3)
#['alex', 'WUSIR', ['taibai', 99, 'ritian', '文周'], 20]
# 4,将 'taibai' 首字母大写。
print(l3[2][0][0])
l3[2][0] = l3[2][0].capitalize()
print(l3)
#['alex', 'WUSIR', ['Taibai', 99, 'ritian', '文周'], 20]
# 5,将 99 通过数字加1 的方式变成100,并放回原处。
l3[2][1] = int(l3[2][1])+1
print(l3)
#['alex', 'WUSIR', ['Taibai', 100, 'ritian', '文周'], 20]
2.5元组tuple。
元组:俗称不可变的列表,又被成为只读列表,元祖也是python的基本数据类型之一,用小括号括起来,里面可以放任何数据类型的数据,查询可以,循环也可以,切片也可以.但就是不能改.
tu1 = ('alex', 100, True, [1, 2, 3], {'name':'太白'},(22, 33))
# 索引,切片,切片+步长
print(tu1[0])
print(tu1[:3])
# for 循环
for i in tu1:
print(i)
# index,len,count
# 应用场景: 一些非常重要的数据,不允许所有人修改的,放在元组中。
tu1[3].append(666)
#tu1.append(666) #错的
# 元组 儿子不能改,孙子可能可以改。
print(tu1)
2.6range
自定制的数字范围的可迭代对象,类比成列表。range一般和for循环结合使用。
for i in range(1,10):
print(i)
for i in range(1,10,2): # 步长
print(i)
for i in range(10,1,-2): # 反向步长
print(i)
l1 = ['alex', 'alex', 'taibai', 'egon', '景女神', '文周老师', '日天']
#返回每个元素的索引值
for i in l1:
print(l1.index(i))#当有同名时,只返回第一个值
for i in range(0,len(l1)):
print(i)
s1 = 'alex'
l1 = ['alex', 'alex', 'taibai', 'egon', '景女神', '文周老师', '日天']
#判断s1在l1中
print(s1 in l1)
print(['alex', 'alex'] in l1) # False 只判断最小元素