6、for循环补充、可变类型与不可变类型、基本操作
一、for循环的补充
for+range
for i in range(10,3,-1)(从第十位倒取到第四位)
print(i)
for+enumerate
for i,name in enumerate(["egon","tom","jack"]):
# [(0,"egon"),(1,"tom"),(2,"jack")] print(i,name)
对于列表可取值为(索引 值)也可以用与字典,取值为(索引,key)
二、不可变类型与可变类型
不可变类型:值改变,id也改变,证明是产生了新值,原值是不可变类型
可变类型:值发生改变,但是id不变,证明就是在改变原值,原始是可变类型
l = [111,222,333] print(id(l)) l[0] = 6666666 #将111改为6666666 print(id(l))
三、数字类型int与float
1、定义:
整型int的定义:
age=10(本质age=int(10))
浮点型float的定义:
salary=3000.3(本质salary=float(3000.3))
注意:名字+括号的意思是调用某个功能,比如
print(...)调用的是打印功能
int(...)调用的是创建整型数据的功能
float(...)调用的是创建浮点型数据的功能
2、类型转换
1、数据类型的转换
1.1 int可以将由纯整数构成的字符串直接转换成整型,若包换其他任意非整数符号,则会报错
s=‘123’
res=int(s)
print(type(res))
1.2进制转换
十进制转换成其他进制
bin(3)转换为二进制
oct(9)转换为八进制
hex(17)转换为十六进制
其他进制转换成十进制
例:int(‘0b11’,2)二进制转十进制3
1.3float同样可以用来做数据类型的转换
同int,例:s=‘12.3’
res=float(s)
print(type(res))
int与float类型常用操作+内置的方法都为数学运算+比较运算
两者都表示存一个值,是不可变的
四、字符串
1、定义:在单引号,双引号,三引号内包含一串字符
name1 = ‘jason’ 本质:name=str('任意形式内容')
name2= “lili” 本质:name=str(“任意形式内容”)
name3= """ricky""" 本质:name=str("""任意形式内容""")
2、类型转换
数据类型转换:str()可以将任意数据类型转换成字符串类型,例如
type(str([1,2,3])) # list->str <class 'str'> type(str({"name":"jason","age":18})) # dict->str <class 'str'> type(str((1,2,3))) # tuple->str <class 'str'> type(str({1,2,3,4})) # set->str <class 'str'>
补充内容:
print(“abc\nddd”)表示换行打印
print(r“abc\nddd”)值前面加r类似于EXCEL中将后面的单元格设置为文本格式,打印不换行
print (“abc\\nddd”)
3、使用
1、按照索引取值(正向取与反向取)
str1 = ’hello python‘
1.1正向取值(从左往右)
str1[6]
p
1.2反向取(负号表示从右往左)
str1[-4]
h
1.3对于str来说,只能按照索引取值,不能更改
str1[0]=’H‘报错typeerror
2、切片(顾头不顾尾,步长)
2.1顾头不顾尾:取出索引为0到8的所有字符
str1[0:9]
hello pyt
2.2步长:0:9:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引为0、2、4、6、8
str1[0:9:2]
hlopt
2.3反向切片
str[::-1]
3、长度len
msg = ‘’hello world‘’
print(len(msg))
4、成员运算in和not in
msg = ‘’hello world‘’
print(“he”in msg)判断 he 是不是在hello world中
print(‘’he‘’ not in msg) 推荐!
print(not ‘’he‘’ in msg)一样的结果,不简洁明了
5、移除空白strip
msg = ‘’ hello ‘’
res = msg.strip()
拓展:
msg = “”******hello****“
print(msg.strip(‘*’))移除的可以为多种符号,只要在引号里面标记
更加复杂的:
msg = ”+-*/hello world+-*/“
print(msg.strip("+-*/"))
6、切分split
msg = ‘’egon:123:3000‘’按照有规律的字符串,取出egon的方式
方式一:print(msg[0:4])
方式二:res= msg.split(":",1)按照引号切,切1次
7、循环
for x in msg :
print(x)
五、重要的操作(*****)
1、strip,lstrip,rstrip(用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列)
例:msg = ‘’****hello*****‘’
print(msg.strip(''*'')) 去除*
print(msg.lstrip((''*''))) 去除左边的*
print(msg.rstrip(''*'')) 去除右边的*
2、lower,upper(更改大小写)
msg = print(msg.lower())全部改为小写
msg = print(msg.upper)全部改写为大写
3、startswith,endswith(检查字符串是否是以指定子字符串开头/结尾,如果是则返回 True,否则返回 False)
msg = ''egon is ok''
print(msg.startswith(''egon'')) True
print(msg.endswith('''ok'')) True
4、format的三种玩法
1)msg = 'my name is %s my age is %s'%(''egon'',18)这种方式是以%s的方式将括号例的值赋值进去
msg = my name is {name} my age is {age}.format(name="egon",age=18) 这种方式是将变量名放到花括号中,通过.format给变量名赋值
2)msg = "my name is {1} my age is {0}".format(18,"egon") 这是花括号通过索引来赋值
补充:
msg = "my name is {name} my age is {age}".format(**{"age":18,"name":"egon"})
msg = "my name is %(name)s my age is %(age)s" % {"age":18,"name":"egon"}
这两种方法输出结果等同,当后面为列表时,想要通过Key赋值的话,需要在列表前加**,第二种是通过%()s的方式进行传值
3)name = ''egon''
age = 18
print(f''my name is {name} my age is {age}'') 这种方法通过f,然后将前两个变量值赋值给花括号的变量名中
5、split,rsplit(通过指定分隔符对字符串进行切片)
msg = "egon:18:3000"
print(msg.split(":",1)) 这种切的方式为,从左往右以:为切点,切1次
print(msg.rsplit(":",1)) 这种切的方式为,从右往左以:为切点,切1次
6、join(将序列中的元素以指定的字符连接生成一个新的字符串)
l=["egon","18","3000"]
print(":".join(l))
输出结果为:egon:18:3000
7、replace(把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次)
msg = 'egon xxxx egon yyy egon' print(msg.replace('egon',"EGON",2))最后一个2是替换次数 print(msg.replace('egon',"EGON")) 拓展: msg = "**_+_***he llo***+-**" print(msg.strip("*_+-").replace(" ",''))
先用strip将左右的多余符号去掉,再用replace将空格去掉
8、isdigit(判断字符串是否为数字组成)
案例:
num = input(">>>: ") # num = "asfasdf" if num.isdigit(): num = int(num) print(num > 10) else: print("必须输入数字,小垃圾")
六、列表的基本使用
1、用途:按照位置存放多个任意类型的值
2、定义方式:在[]内用逗号分隔开多个任意类型的值
list数据类型转换:把可迭代的类型转换成列表,可以被for循环遍历的类型都是可迭代的
3、常用操作+内置方法
1)按照索引存取值(正向存取+反向存取):即可存也可取
l=[111,222,333] print(id(l)) l[0]=666 print(l) print(id(l)) l=[111,222,333] l[0]=666 l[3]=777 # 列表索引不能超出范围 l[3] # 列表索引不能超出范围
2)切片(顾头不顾尾,步长)
l=[11,22,33,44,55,66,77,88,99] res=l[1:7:2] res=l[:] res=l[::-1] print(res)
3)长度
print(len([''aaa'',11,2222])) 这个列表长度为3
4)成员运算in和not in
print(111 in [’‘aaa’‘,111,222])) 判断111是否在这个列表中
5)追加与插入
在列表的尾部追加
l=[111,222,333,] l.append(444) l.append(555) print(l)
在列表的任意一个地方插入
l=[111,222,333] l.insert(1,6666) print(l) l=[111,222,333] res = l.append(444) res = l.insert(1,444) print(res)#==》输出结果为none,没有反馈
6)删除
l=[111,222,333]
a、万能删除del
del l[0] print(l)None
b、l.remove(指定元素)
res=l.remove(222) print(l) print(res) #None
c、l.pop(指定索引)
res=l.pop(1) print(l) print(res)#有反馈
7)循环
l=[111,222,333] for x in l: print(x)