Python学习整理(之二)

Python学习整理(之二),第1张

概述Python学习整理(之二)循环,列表,字典,元组Python学习整理(之二)一.循环结构1.while循环2.range()函数3.forin循环4.continue和break二.列表1.列表的创建2.列表的增删改列表的增加切片修改删除3.排序4.查询5.判断和遍历6.快速生成三.字典1.创建2.获取3.增删改3.获取字典的视图4 Python学习整理(之二)

循环,列表,字典,元组Python学习整理(之二)一.循环结构1.while循环2.range()函数3.for in循环4.continue和break二.列表1.列表的创建2.列表的增删改列表的增加切片修改删除3.排序4.查询5.判断和遍历6.快速生成三.字典1.创建2.获取3.增删改3.获取字典的视图4.遍历5.快速生成四.元组1.创建2.遍历3.注意事项

一.循环结构1.while循环

在符合条件的情况下进行循环,否则就退出循环

pk=0# 初始化参数a=1while a<=100:# 判断a是否在100以内    if a%2==0:# 判断a是否为偶数        pk+=a# 对a进行累加    a+=1# 改变参数值使其可以遍历1-100中间的整数print(pk)# 输出结果'''   这就是1-100的偶数之和'''

在使用while循环的时候要注意一定要循环体的末尾进行条件参数的改变,否则会陷入死循环

2.range()函数

在我学习for in循环前先进行了range函数的学习,range函数能使我这样的初学者更好的理解for in循环。

rang函数的作用为从0开始生成一个序列(类似于c中的一维数组)
生成一个range函数有三种方式,第一种:
range(stop)只有一个参数,生成一个从0开始步长为1的序列

g=range(5)# 默认从0开始,步长为1print(g)# 生成结果为range(0,5)这里的返回值为迭代器对象print(List(g))# 生成结果为[0,1,2,3,4] 这是一个列表

我们无法直接将range函数的结果直接输出,但是可以通过使用List函数将range函数的运算结果输出
第二种方式:
range(start,stop)默认step为1

print(List(range(1,10)))# 从1开始步长为1,到9结束# 输出结果为[1,2,3,4,5,6,7,8,9]

第三种方式range(start,stop,step)

print(List(range(1,10,2)))# 输出结果为[1,3,5,7,9]print(10 in range(1,10,2))# 运行结果为False说明10并不在这个序列中

其实三种方式归根结底是一种方法,只是前两种方式可以省略一些步骤,使用默认值输出

3.for in循环

Python里的for in循环有点类似c里面的for循环,使用格式为
for 自变量 in 可迭代对象
直接看代码会比较直观

sum=0for i in range(101):    if i%2==0:        sum+=i        i+=1print(sum)

上面计算了1-100的偶数之和,in后面一定要是可迭代对象,像列表,元组,字符串之类的,详细的可以去看看这个博主博客[可迭代对象是啥],个人感觉讲的还是蛮清楚地

4.continue和break

说道循环结构,就绕不开continue和break这两个控制循环的关键字,这两一般配合if的分支结构来使用,continue是当程序执行到continue时是跳到循环开始的时候继续执行程序

# 输出1-50之间所有5的倍数for item in range(1,51):    if item %5!=0:        continue    else:        print(item)

break作用和continue的作用相反,brake是执行到break时跳出循环

"""   输入三次密码,正确的话结束,不正确继续输入直到输完3次结束"""for item in range(3):# 最多输入三次    pwd=input('请输入密码:')    if pwd=="45681":        print('密码正确')        break    else:        print('密码错误')else:    print('对不起,由于密码输入错误过多,该账户已被锁定')"""下面是使用while语句进行实现"""a=0while a<3:    pwd=input('请输入密码:')    if pwd == "45681":        print('密码正确')        break    else:        print('密码错误')    a+=1# 这个不加的话a就一直是0然后整体死循环else:    print('对不起,由于密码输入错误过多,该账户已被锁定')

简而言之,break和continue的作用对象是在其所对应那一层的循环,break跳出,continue从头再来
在学完循环后常规练习99乘法表

for i in range(1,10):    # 外层循环控制行数    for j in range(1,i+1):        # 内层循环控制列数        print(j,"*",i,"=",j*i,end="\t")    print("")

还有空心矩形

# 接下来试一试空心矩形7*10for i in range(7):    for j in range(10):        if 0<i<6:            if j==0 or j==9:                print("*",end=" ")            else:                print(" ",end=" ")        else:            print("*",end=" ")    print("\n")

在这里学到的东西是end=,这个关键字的意思是,在执行完print函数后,不进行换行 *** 作,打印它“=”后面的参数

二.列表

个人将列表理解成了类似C语言里面一维数组,与C语言不同的是,这里的列表存储的数据集类型不仅仅是同一种类型的参数,它的原理是存储各个参数的ID,因此可以存储不同类型的参数

1.列表的创建

列表的创建方式有两种:
第一种使用[ ]直接赋值

lst=['hello',132,'world']

创建列表的第二种方式,使用内置函数List( )

lst2=List(['hello','world',998])

在这里学到的是赋值运算的本质是将ID值赋予对象,在调用参数的时候大体上是通过形参里存储的ID找到实参,再参与运算

2.列表的增删改列表的增加
lst=['add',33.6,'item',454,77,False]print('修改前的列表ID:',ID(lst))"""   列表元素的增加 *** 作"""# append()在列表末尾增加一个元素lst.append('sg553')print(lst)print('第一次修改后的列表ID:',ID(lst))# 运行结果和初始的ID一样并没有发生改变# extend()在末尾增加至少一个元素(可以增加多个元素)lit2=['ssd','ssd',556]lst.extend(lit2)# 将lit2的元素添加到lit2的末尾print(lst)# inset()在列表的任意位置增加一个元素lst.insert(1,5)# 在索引为1的位置插入一个整数5print(lst)# 切片,在列表的任意位置增加至少一个元素lst2=[55,66,44]lst[2:]=lst2# 这里的意思是将索引2后面的元素全切掉然后将lst2的元素替换进去

上面讲到了列表里的一个关键的点—切片,切片顾名思义就是将列表里面的一段参数切出来进行 *** 作

切片

切片格式:
列表名[start:stop:step]
start默认值为0,step默认值为1,stop不赋值的话就默认直接切到末尾,这里是step为 正的情况
如果step为负,就从列表的最后一个元素开始开始,到列表的第一个元素结束
切片范围为[),取左不取右

lst2=[22,33,55,'python','cpp','java']print(ID(lst))# 输出切片前的列表对象的IDprint(lst2[1:5:1])# 输出结果为[33,55,‘python’,‘java’]print(ID(lst2[1:5:1]))# 输出切片后的ID

经过对比后发现切片 *** 作完成之后,列表的ID发生改变,这就说明了切片 *** 作的实质是生成一个新的列表对象,将指定的元素ID给到新生成的对象中去

print(lst2[::-2])# 这里的输出结果为['java','python',33]

里可以用这种方法进行逆序输出

修改

代码看的更直观

lst=[77,55,88,66,44,11,2,'sst',True]# 一次修改一个值lst[1]='555'print(lst)# 一次修改多个值需要用到切片 *** 作lst[2:5:]=[44,66]print(lst)
删除
lst=[10,20,11,22,11,'assd','kt']lst.remove(11)# 移除列表中的一个元素,如果有重复的元素,默认删除第一个print(lst)lst.pop(2)# 移除索引为2的元素,如果pop()值为空的话默认删除最后一个元素print(lst)

上面是进行单参数的修改,如果进行多元素的修改需要进行切片 *** 作

'''删除指定位置的元素'''lst[1:4:1]=[]# 将切片部分的值替换成空元素print(lst)

清空元素clear

lst.clear()print(lst)

删除列表

del lstprint(lst)# 这里由于lst列表被删除所以报错
3.排序

既然有了列表那么肯定会有排序的需求,在C语言里面我个人喜欢用冒泡法对一个数组里的元素进行排序,在Python里面排序好像还挺方便的,使用 列表名.sort() 就可以对列表进行升序排列

lst=[100,55,46,87,44,66,55,22]lst.sort()print(lst)# 默认升序排列lst.sort(reverse=True)# 降序排列print(lst)

还有一种使用内置函数sorted()进行排序

print('---------------使用内置函数进行升序序排列----------------')lst2=[10,55,2,4,66,89]print('排序前的ID:',ID(lst2))lst3=sorted(lst2)print(lst3)print('排序后的ID:',ID(lst3))

在这里我产生了一个大胆的想法,这里是因为将排序后的结果赋值给了另一个变量,如果赋值给自己是不是不会变呢?
于是

lst2=sorted(lst2)print(lst2,ID(lst2))print()

结果是
排序前的ID: 2268982508544
排序后的ID: 2268982508672
直接打脸,这里的ID变了,应该是sorted函数生成了一个新的对象,所以变量名不变并不是代表它的ID不变,此时的变量不是原来的变量
后面我就想着如果列表里面不止一种类型的参数怎么排序

lst4=[True,False,2]lst4.sort()print(lst4)#[False, True, 2]

在将bool值和int型参数比较时,将Ture对应int值转化为1,False值转化为0后进行比较

lst5=['2','py','4','1','gt']lst5.sort()print(lst5)

如果全为str类型的变量,优先进行数字的字符串比较,其他的按序输出
含有str和int类型的参数不能进行比较哦,会报错

4.查询
# 使用index方法来获取元素的索引(下标?)lst=['hello',667,'hello']print(lst.index('hello'))# 输出结果为0,若列表中有多个相同的元素只返回第一个的索引# print(lst.index('kkk'))# 查找的元素不存在的话,会报错# print(lst.index('hello',1,2))# 会报错,包括索引为1但不包括2print(lst.index('hello',1,3))
5.判断和遍历

查找元素是否在列表对象里面使用in,not in
对列表的遍历使用for in

lst=[10,20,30,40,50,60,70,80,90,'hello','ytg']print(10 in lst)# Trueprint(100 in lst)# Falseprint('ytg' not in lst)# Falseprint('--------------------遍历列表元素------------------')for i in lst:    print(i)# 输出结果10,20,30,40,50,60,70,80,90,'hello','ytg'
6.快速生成
lst=[i*i for i in range(10)]print(lst)# 将0-9的平方数以列表的形式输出lst2=[j for j in range(2,11,2)]print(lst2)

这也没啥东西,看看就行

三.字典

字典是一个可变的无序序列,与列表不一样的是,它的存储方式是以键值对的存储的,经过hash函数对键值的计算来确定键值对的位置(通过key值来确定value的位置)

1.创建

字典的创建方式有两种
第一种是使用花括号来创建

pwd={'1号':55,'2号':66,'3号':44}print(pwd)# {'1号': 55, '2号': 66, '3号': 44}

第二种是用内置函数dict()创建

xiaoming=dict(name='ming',age=16,occupation='student')print(xiaoming)# {'name': 'ming', 'age': 16, 'occupation': 'student'}print(type(xiaoming))# <class 'dict'>

空字典

d={}print(d)
2.获取

字典元素的获取使用[key]和get()函数

# []通过键来获取值print(pwd['1号'])# 55,若果给定的key不存在,会抛出errorprint(pwd.get('1号'))# 55,如果给定的key不存在不会报错会返回none# 可以设置初始的value值来修改返回值print(pwd.get('4号',777))# 当查找的key不存在时输出指定value
3.增删改

字典的删除 *** 作使用 del 字典名[‘key’]

pwd={'ex':100,'es':520,'ct':10}print('删除前:',pwd)# 删除前: {'ex': 100, 'es': 520, 'ct': 10}del pwd['es']# 方括号print('删除后:',pwd)# 删除后: {'ex': 100, 'ct': 10}

字典清空

pwd.clear()

字典的新增

pwd['cs']=55# 同时可以用于key的value值的修改print('增加后',pwd)
3.获取字典的视图
lay={'1':12,'2':13,'3':14,'4':15,'5':16}print(lay.keys())# 获取字典里所有的键print(lay.values())# 获取字典里全部的值print(lay.items())# 获取字典里所有的键值对,输出形式为元组
4.遍历

字典的遍历使用for in循环

lay={'1':12,'2':13,'3':14,'4':15,'5':16}for item in lay:    print(item,end='\t')# 默认输出key    print(lay[item],end='\t')# 输出value    print(lay.get(item))# 或者可以使用get方法获取value

总结:

字典中的元素是无序的,key为不可变对象,int和str类型参数都是不可变对象key不能重复,如果重复会出现值覆盖的情况,value会产生覆盖字典的内存空间是动态的,会根据需求去分配内存空间,它的效率提升是通过增加内存来实现的5.快速生成

先定义两个列表一个作为key,一个作为value,这两个列表的元素个数一定要一样

item=['ft','fk','fi','fj']cpt=[15,16,18,147]

然后使用zip一一对应打包成元组

zip(item,cpt)

接着使用for in循环

cpk={item.upper():cpt for item,cpt in zip(item,cpt)}print(cpk)

结果:{‘FT’: 15, ‘FK’: 16, ‘FI’: 18, ‘FJ’: 147}
upper()将字母转化为大写
lower()将字母转化为小写

四.元组

元组和字符串一样属于不可变的序列(在不改变ID的情况下不能进行增删改的 *** 作),列表,字典,是可变序列可以进行增删改的 *** 作

1.创建

元组的创建方式有两种,第一种,直接进行小括号的 *** 作

t=('temp',55,'hello')# 这里的小括号可以省略

第二种使用内置函数tuple()赋值,这个函数可以进行数据类型的强制转换

f=tuple(('temp',56,22))

在定义只有一个元素的远足的时候需要加逗号和小括号

e=(12,)
2.遍历

元组是可迭代对象可以使用for in进行输出

h1=[11,22,33]s1=(55,h1,'dlc')for item in s1:    print(item)

或者通过索引一个一个输出

h1=[11,22,33]s1=(55,h1,'dlc')print(s1[0])print(s1[1])print(s1[2])
3.注意事项

元组存储的是对象的的引用,元组中对象的引用是无法改变的,但是如果引用所指向的的对象是可变的那么该对象是可变的

h1=[11,22,33]s1=(55,h1,'dlc')print('修改前',s1,ID(s1))# 运行结果 修改前 (55, [11, 22, 33], 'dlc')  2291777599232# 这里是s1中的55,h1,dlc不变,但是可变列表h1可以进行增删改的 *** 作h1.extend('hello')print('修改后:',ID(s1))# 运行结果 修改后: (55, [11, 22, 33, 'h', 'e', 'l', 'l', 'o'], 'dlc')  2291777599232

在多个程序进行对数据的访问时,如果数据发生改变,就会导致程序出现问题,所以这时候选择元组,进行 *** 作,元组只能进行引用,但是不能修改
最后博主是纯小白,如果有啥写的不对的地方欢迎指正

总结

以上是内存溢出为你收集整理的Python学习整理(之二)全部内容,希望文章能够帮你解决Python学习整理(之二)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1188448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存