Python基础 之 int、bool、str、列表、元组、字典

时间:2022-05-24 20:26:25

数据类型

数据类型划分:可变数据类型     不可变数据类型

不可变数据类型:元组、bool、int (本身不可更改)、str      (可哈希)

可变数据类型:列表list、字典dict   、集合set                        (不可哈希)

注意:集合为不可变类型,但是集合元素可变

一、Int

int   1,2,3...    用于计算

print(i.bit_length())      #求二进制最小位数

例如:

i=7
print(i.bit_length())

二、Bool

只有两种结果:True   False

int----->str                    str(int)

str----->int                    int(str)        注意:字符串必须为数字

int----->bool                  非零转换为bool为True,反之则为False

bool---->int                   只有两种结果,真为1,假为0;

str-------bool

s=" "   -------False         空字符串则为False

s="0"--------True           非空字符串都为True

相比

while  True:

pass

还有一种方法更有效率:

while 1:

pass

三、字符串str

1、字符串的索引

s='ASDFGHJKL'
s1=s[3]
print(s1)

结果为:F

注意:对字符串进行操作否会形成新的字符串,对原字符串没有影响。

2、字符串的切片

s='ASDFGHJKL'
s1=s[0]
s2=s[0:4]
s3=s[-1]
s4=s[-2]
s5=s[0:]
s6=s[:]
s7=s[0:0]
s8=s[1:5:2]
s9=s[0:4:-1]
s10=s[3::-1]
s11=s[3::-2]
s12=s[-1::-1]
s13=s[::-1]

3、字符串的操作

s="alex wusir"
s1=s.capitalize() #首字母大写 s2=s.upper() #全部大写 s3=s.lower() #全部小写

下面看一个咱们常用的关于验证码的例子:

s_str="acEQ"
you_input=input("请输入验证码,不区分大小写")
if s_str.upper()==you_input.upper():
print("登录成功")
else:
print("验证码错误,请重新输入")

继续看对字符串的操作:

s4=s.swapcase()       #大小写翻转

s5=s.title()          #每个隔开的单词,首字母大写(特殊字符或数字)

s6=s.center(20,"#")   #居中,空白填充
s7=s.expandtabs() #逢8补齐

字符串有长度吗?答案是肯定的。咱们来看一下计算字符串长度的方法:

s="alex wusir"
i=len(s) #计算字符串的长度
print(i)

注意:中间的空格也占一个长度单位。

查看字符串开头和结尾的方法

s="alex wusir"
s1=s.startswith("alex") #字符串是以...开头 s2=s.endswith("sir") #字符串是以...结尾

查看字符在字符串中的索引位置:

s1=s.find("w")     #返回w在字符串中的索引位置

s2=s.find("ex")    #如果是多个,以第一个字母索引为准

通过位置找索引

s13=s.find("q")     #通过元素找索引,找不到返回-1

s14=s.index("u")     #通过元素找索引,找不到报错

删除字符串中空格或多余部分:

s1=s.strip()          #默认删除空格

a="*a%lex Wusir%"
s2=a.strip("*%") #删除前后相同内容
print(s2) s=" alex wusir "
s3=s.strip() #删除前后空格 s4=s.rstrip() #删除右边空格 s5=s.lstrip() #删除左边空格

找出单个字符在字符串中的个数

s="asdfgbnhfdsshjk"
s1=s.count("s") #输出字母s在字符串中的个数
print(s1)

字符串转化为列表

s="alex wusir taibsi"    #字符串转化为列表
y=s.split()
print(y)

4、格式化输出 format的三种方法

s1="我叫{},今年{},爱好{},再说一遍我叫{}".format("高雅",22,"看电影","高雅")

s2="我叫{0},今年{1},爱好{2},再说一遍我叫{0}".format("高雅",22,"看电影")

s3="我叫{name},今年{age},爱好{hobby},再说一遍我叫{name}".format(name="高雅",age=22,hobby="看电影")

5、replace 替换全部相同内容

s="我在教室写代码,写代码真有趣!"
r=s.replace("写代码","看书")
print(r)

replace("旧","新")

还可以加入替换的个数

replace("旧","新",个数)

6、for循环

s="pycharm"
for i in s:
print(i)

四、列表

1、增

有三种方法:append、insert、extend

li=["alex","wusir","egon","女神","taibai"]

 l1=li.append("高雅")        #列表后面追加

 l2=li.insert(1,"丫丫")       #按照索引插入

 l3=li.extend("写代码")         #分解成最小元素添加

l3输出结果:['alex', 'wusir', 'egon', '女神', 'taibai', '写', '代', '码']

注意:int对象不能迭代;

可迭代的是每个组成的元素

例题:添加新员工姓名,按q退出

li = ['alex','wusir','egon','女神','taibai']
while True:
name = input("新人姓名:")
if name.upper()=="Q":
break
else:
li.append(name)

2、删

四种方法:pop、remove、clear、del

li=["alex","wusir","egon","女神","taibai"]
l1=li.pop(1) #按照索引删除元素
print(l1,li)
l2=li.pop() #索引为空,默认删除最后一个 l3=li.remove("高雅") #按照元素删除 l4=li.clear() #清空列表(列表为空) del li #删除列表(列表消失) del li[2:] #按照切片删除

l1输出结果:女神 ['taibai', 'wusir', 'egon']

注意:1)、pop()中,加入索引,唯一一个有返回值,索引为空,默认删除最后一个;

2)、clear()方法,列表为空,但列表存在;

3)、del方法,列表消失。

3、改

两种方法:按索引、按切片

li=["alex","wusir","egon","女神","taibai"]
li[0]="男神" #按索引修改 li[0]=[1,2,3] #按索引修改为列表 li[1:2]="yaya" #按切片修改(切片所指内容删除,在此位置随机按照元素添加)
li[1:2]="yaya"输出结果为:['alex', 'y', 'a', 'y', 'a', 'egon', '女神', 'taibai']

注意:按切片修改只是把切片内容删除,在此位置添加输入内容,并且是以单个元素添加

4、查

两种方法:for循环、切片

li=["alex","wusir","egon","女神","taibai"]

for i in li:               #for循环查询

print(li[0:2])              #按切片查

5、排序

li=[1,4,6,3,5,2,7,9]

li.sort()                   #正向排序

li.sort(reverse=True)      #反向排序

li.reverse()              #反转

注意:排序只能用于Int类型,否则报错

6、列表的嵌套

li=["taibai","丑小丫","高雅",["alex","egon",78],34]

print(li[1][1])                   #小

print(li[0].capitalize())         #Taibai

li[2]=li[2].replace("雅","丫")    #高雅变为高丫(好难听啊。。)
print(li) li[3][0]=li[3][0].upper() #ALEX
print(li)

五、元组

只读列表,可循环查询,可切片。(儿子不能改,孙子可能可以改)

tu=(1,2,3,"alex",[2,3,4],"egon")

print(tu[3].upper())          #ALEX

tu[4].append("taibai")       #内嵌列表中添加taibai
print(tu) for i in tu: #查询元祖中的每个元素
print(i) print(tu[0:4]) #(1, 2, 3, 'alex')

六、公共方法

1、len( )    计算长度

tu=(1,2,3,"alex",[2,3,4],"egon")
l=len(tu)
print(l) #输出结果:6

2、count( )   计算个数

tu=(1,2,3,"alex",[2,3,4],"egon","alex")
num=tu.count("alex")
print(num) #输出结果:2

3、index( )   查询索引

tu=(1,2,3,"alex",[2,3,4],"egon","alex")
print(tu.index("egon")) #输出结果:5

七、Join

join:列表转换为字符串

那么字符串转换为列表是什么呢?之前讲过的,对了,就是split。

s="alex"
s1="_".join(s) #用_连接
print(s1) #输出结果:a_l_e_x s2="*".join(s) #用*连接
print(s2) #输出结果:a*l*e*x li=["alex","hello"]
s3="".join(li) #无缝连接
print(s3) #输出结果:alexhello

注意:引号里面是啥,就用此连接,如果是空,就是无缝连接。

八、Range

相当于列表,但元素只能是数字。

顾头不顾尾、0开头不用写、可以有步长

range()放索引位置,可切片

for i in range(10):
print(i) #输出结果:0,1,2,3,4,5,6,7,8,9 for i in range(0,10,2):
print(i) #输出结果:0,2,4,6,8 for i in range(10,0,-3):
print(i) #输出结果:10,7,4,1

注意一下

for i in range(0,10,-2):
print(i) #输出结果:

输出结果为空,啥都没有。

下面做一道题:让列表循环,当然里面的内嵌列表页要循环哦!

li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds']
#第一种方法:
for i in li:
if type(i)==list:
for j in i:
print(j)
else:
print(i)
#第二种方法:
for i in range(len(li)):
if i==5:
for j in li[i]:
print(j)
else:
print(li[i])

九、字典

python 中唯一一个映射数据类型

字典的key:必须是不可变数据类型

value:任意数据类型

字典dict优点:二分法查询

存储大量的关系型数据

特点:无序(包括3.5级以前版本)

1、增

1)、直接添加

dic1={"name":"jin","age":18,"sex":"male"}
dic1["high"]=185 #没有键值对,直接添加 dic1["age"]=16 #有键,则值覆盖
print(dic1)

2)、 setdafault

dic1.setdefault("weight")    #有键值对不做任何改变,没有才添加
print(dic1)
dic1.setdefault("weight",150)
print(dic1)

2、删

1)、pop:  直接按照字典的键删除,有返回值

dic1={"name":"jin","age":18,"sex":"male"}
dic1.pop("age") #有返回值, dic1.pop("high","没有") #有则直接删除,没有则返回提示语
print(dic1)

2)、 popitem:随机删除,有返回值

dic1.popitem()      #随机删除
print(dic1)

3)、clear:清空字典

dic1.clear()      #清空字典
print(dic1)

4)、del:删除键值对,删除字典

del dic1["name"]      #删除键值对,没有则报错
print(dic1)
del dic1["high"]
print(dic1)
del dic1 #删除字典

3、改

1)、直接通过字典的键修改

dic1={"name":"jin","age":18,"sex":"male"}
dic1["age"]=16 #键相同,值覆盖
print(dic1)

2)、update:更新字典

dic2={"name":"alex","weight":75}
dic2.update(dic1) #原字典更新添加到旧字典,有键则值覆盖,无键则全添加
print(dic2)

4、查

1)、通过keys、values、items查找

dic1={"name":"jin","age":18,"sex":"male"}
print(dic1.keys()) #字典的键
print(dic1.values()) #字典的值
print(dic1.items()) #字典的条目(以元组形式,键、值显示)

2)、for循环

for i in dic1:      #啥都不写,默认为键
print(i)
for i in dic1.keys(): #字典的键
print(i)
for i in dic1.values(): #字典的值
print(i)
for i in dic1.items(): #字典的条目
print(i)
for k,v in dic1.items(): #以键、值形式显示
print(k,v)

3)、直接通过字典的键查询值

print(dic1["name"])   #查找对应的值,找不到报错
print(dic1["name1"]) #报错

4)、get

print(dic1.get("name"))   #查找对应的值,找不到返回none
print(dic1.get("name1","None"))
print(dic1.get("name1","没有这个值"))#查找对应的值,找不到则返回提示语

5、字典dict嵌套

dic={
"name":["alex","wusir","taibai"],
"py9":{
"time":"",
"learn_money":19800,
"addr":"CBD"
},
"age":21
}

对上面列表进行操作:

1)、将alex全部大写

dic["name"][0]=dic["name"][0].upper()
print(dic)

2)、在name中添加yaya

dic["name"].append("yaya")
print(dic)

3)、将年龄变为56

dic["age"]=56
print(dic)

4)、在py9中添加键值对女生有6人

dic["py9"]["female"]=6
print(dic)