2022-4-18 python基础学习
列表
定义一个学生的分数
score =89
定义一个班的学生的分数
score1=98
score2=87
score3=69
…
scoren=68
scores[]=score[98,87,69,…,scoren]
求一个班的学生的平均分:
(score1+score2+score3+…+scoren)/n
1什么是列表(list)
1.list 是容器型数据类型(可以同时保存多个数据类型)
2.将[]作为容器的标志,里面有多个元素(一个容器中每个独立的数据就是元素),用逗号隔开:
[元素1,元素2,元素3,…]
3.列表是可变的(可变指的是元素的个数,元素的值和元素的顺序可变) - 列表支持增删改
4.列表是有序的 - 列表支持下标操作
5.列表的元素:任何类型的数据都可以作为列表的元素
空列表:list1=[]
2 列表中元素的类型
-
list1 =[29,34,56,67] - 相同类型数据
-
list2= [29,2,3,‘abc’,True,[10,2],{‘a’:10}] - 不同数据类型
-
一个列表可以作为另外一个列表的元素
列表是有序的,集合是无序的
print([10,20,30]==[30,20,30]) #Falese,列表是有序的
print({10,20,30})=={30,20,10} #True,集合是无序的
3 列表的增删改查
列表的查:获取元素
-
查单个元素 - 获取指定列表中指定下标对应的元素
语法:列表[下标]
说明:1)列表 - 可以是具体的某个列表,也可以是保存列表的变量
2)[] - 固定写法
3)下标 - 整数,下标又叫索引,是元素在有序序列中的位置信息
python中元素对应的下标有两种:1从前往后从0开始不断增加 2从后往前从-1开始不断减少
注:下标不能越界
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6SOWUFC-1650372862523)(C:\Users\86567\AppData\Roaming\Typora\typora-user-images\image-20220418102144093.png)]
games=[‘英雄联盟’]
games=['英雄联盟','王者荣耀','开心消消乐','炉石传说','部落冲突','原神','绝地求生'] print(games[1]) print(games[100]) #索引超过序列索引 print(games[1:-1:2]) #不为空 print(games[1:-2:-2]) #为空
-
获取部分元素 - 切片(获取一个新列表)
切片的完整语法
list[开始下标:结束下标:步长]
步长决定方向,决定怎么取值
切片的过程:
第一步:看步长对应的方向和开始下标到结束下标对应的方向是否一致,如果不一致,切片的结果一定为空值
第二部:确定有效范围:从开始下标对应的元素到结束下标对应的元素,结束下标对应的元素取不到
第三部:获取元素:通过步长获取元素:步长的正负确定获取方向,步长绝对值确定获取的时候是否跳着取,步长绝对值为1,表示一个一个取;绝对值为2,表示取一个跳一个,索引加步长
怎么写切片
第一步:确定开始下标:看结果中第一个元素在原列表中的下标,
第二步:确定方向和步长
第三步:确定结束下标
省略:1不写步长,默认步长为+1: 列表[开始下标:结束下标],省略步长时,步长为1
2省略开始下标:列表[:结束下标:步长]
3省略结束下标:列表[开始下标::步长]、列表[开始下标:]
如果步长为正,从开始下标开始往后取,一直取到最后一个元素;如果步长为负,从开始下标开始往前取,取到第一个元素为止
print(movies[-2::-3]) print(movies[3:6]) print(movies[:-3]) print(movies[:4:2]) print(movies[-4::2]) print(movies[1::4]) print(movies[::3])
遍历 - 将列表中的元素一个一个的全部取完
方法1 :直接获取元素
for 变量 in 列表:
循环体(变量依次取到的就是列表中的元素)
方法2 - 通过遍历下标来遍历元素
for 变量 in range(len(列表)):
循环体(变量取到的每个元素的下标,列表[下标]就可以取得元素
len(列表) - 计算列表的长度
方法3 - 同时获取下标和元素
for 变量1,变量2 in enumerate(列表):
循环体(变量1依次获取到的是每个元素的下标,变量2依次获取到的是每个元素)
2 增
1)列表.append(元素) 在列表的最后添加指定元素
nums=[10,20]
print(nums)
nums.append(100)(只是一个方法)(方法不产生结果)
print(nums)
2)insert()
nums=[10,20,30]
print(nums)
nums.insert(下标,添加的元素) - 谁的前面下标就写谁
2删除
第一种
del 列表[下标] - 删除列表中指定下标对应的元素
列表.remove(元素) - 删除列表中指定元素(如果列表中有多个相同的元素,被删除时只删除第一个元素,如果删除了列表中不存在的元素,会报错)
#方法一 scores=[98,79,45,55,72,64,82,90,23,45,59] #java中数据都是指针数据 for x in scores[:]: if x<60: scores.remove(x) print(scores) #方法二 scores=[98,79,45,55,72,64,82,90,23,45,59] for x in range(len(scores)-1,-1,-1): if scores[x]<60: del scores[x] print(scores) #方法三: scores=[98,79,45,55,72,64,82,90,23,45,59] index=0 while index<len(scores): if scores[index]<60: del scores[index] else: index+=1 print(scores)
列表.pop(),列表.pop(下标) - 取出列表中指定下标对应的元素
3 改
列表[下标]=新值 - 将列表中指定下标对应的元素修改成指定的值
4 in和 not in
元素 in 列表 - 判断列表中是否存在元素,如果存在就返回True,否则返回Falese
列表的运算(+、*)
算术运算符
列表1+列表2 - 将两个列表合成产生一个新的列表
print([10,20,30]+[100,200]) #[10, 20, 30, 100, 200]
列表1*整数、整数 * 列表(n个列表合并成一个新的列表)
print([10,20]*3) #[10, 20, 10, 20, 10, 20] #创建有100个空值的列表 print([None]*100)
比较运算符
1)比较运算符:==、!=(2个列表得长的一样)
2)列表可以和其他类型的数据比较是否相等
print([10,20,30]==[10,20,30]) #True print([10,20,30]==[10,30,20]) #Fales print([10,20]=='10,20') #Fales
2)比较大小-两个列表可以比较大小(比较第一对2个不相等元素的大小)(相同位置上的元素为一对,比较时是临时凑对比较)
print([100,200,300,400]>[101,201])
列表相关的函数:sum、max、min、sorted、len、list
求和:sum(序列) - 求数字序列中所有元素的数值和
求序列中最大值:max(序列)
求序列中最小值:min(序列)
排序 sorted — 将序列中的元素从小到大排序,产生一个新的列表
sorted(序列) 从小到大
sorted(xulie ,reverse=True) 从大到小排列
len(序列) - 获取序列中元素的个数(长度)(迭代器,生成器不能用)
list(序列) -将指定的序列转换成列表,将序列中的元素作为列表的元素。(所有的序列都能转换成列表)
scores=[19,23,89,90,99,83] print(sum(scores)) print(max(scores)) print(min(scores)) new_scores=sorted(scores) print(new_scores) print(len(scores)) list1=list('abc123') print(list1) list2=list(range(3)) prinnt(list2)
列表常用的方法
列表.方法()
列表.clear() - 清空列表
列表.copy() - 复制原列表,产生一个一模一样的新列表
列表.count(元素) - 统计指定元素的个数
列表.extend(序列) - 将序列中的元素全部添加到列表的最后(+是要产生一个新的列表)
列表.index(元素) - 获取指定元素在列表中的下标值(标志的下标值,从0开始的那个下标)
列表.reverse() -逆序(print(nums[::-1])也可以逆序,但是可以产生一个新列表,原列表不变
列表.sort() - 将列表中的元素从小到大排序(产生一个新列表)只能用在列表
列表.sort(reverse=True) - 将列表中的元素从大到小排序(产生一个新列表)只能用在列表
nums=[10,23,67,89] nums.clear() print(nums) new_nums1=nums.copy() print(nums.count(10)) #0 nums.extend('abc') print(nums) print(nums.index(10)) #0
python中的变量都是指针变量( python的变量在保存数据时都是保存数据在内存中的地址)
用一个变量直接给另一个数据赋值,赋的是地址
列表推导式 - 一种用来创建列表的表达式
常见推导式的写法
结构1:[表达式 for 变量 in 序列]
功能:创建一个列表,列表中的元素是表达式的结果 - 让变量去序列中一个一个取,每取一个值计算一次表达式的值
应用:
将原序列中所有的元素,经过统一的变换,转换成新的列表
结构2:[表达式 for 变量 in 序列 if 条件语句]
功能:创建一个列表,列表中的元素是表达式的结果 - 让变量去序列中一个一个取值,每取一个值判断一次条件是否成立,如果成立计算一次表达式的值作为新创建的列表的元素
应用:用来对列表进行删除,修改
list1=[10 for x in 'abc'] #[10,10,10] list_2=[x for x in range(3)] #[0,1,2] list_3=[x*2 for x in range(3)] #[0,2,4] list_4=[x%2==0 for x in range(5)] #[True,Falese,True,Falese,True] list_5=[x for x in range(5) if x %2==0]
#练习1 提出nums中所有元素的个位数 #练习2 将nums中所有的元素都乘以10 nums=[23,78,562,98,71,99] nums_1=[x%10 for x in nums] nums_2=[x*10 for x in nums] print(nums_1,nums_2) #练习3 nums=[23,89,67,21,78,20] list2=[x for x in nums if x%10<5] #练习4 用推导式删除scores中小于60的元素 scores=[30,56,78,91,83,88,45,57,60] new_scores=[x for x in scores if x<60] #练习5 将scores中的元素全部变成及格或不及格 scores=[30,56,78,91,45,57,60] new_scores=['及格' if x>=60 else '不及格' for x in scores ] print(new_scores)
补充:python中的三目运算符
1)C的三目运算符 - ?:
条件语句?值1:值2 - 如果条件语句为真,整个表达式的结果是值1,否则结构是值2
2)python的三目运算符 - if-else
值1 if 条件语句 else 值2 - 如果条件语句为真,整个表达式的结果是值1,否则结构是值2
age=89
if age>=18:
result='成年'
else:
result='未成年'
result='成年' if age>=18 ese '未成年'
作业
- 创建一个列表,列表中有10个数字, 保证列表中元素的顺序,对列表进行排重,并对列表使用进行降序排序
例如:[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
--- 去重之后 [70, 88, 91, 107, 234, 177, 282, 197]
---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]
nums=[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
for x in nums[::-1]:
nums.remove(x)
if x not in nums:
nums.append(x)
print(nums[::-1])
nums.sort(reverse=True)
print(nums)
- 利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
nums=[x for x in range(1,101) if x %10==3]
print(nums)
b. 利用列表推到是将 列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
nums=[True, 17, "hello", "bye", 98, 34, 21]
nums_new=[x for x in nums if type(x)==int ]
print(nums_new)
c.利用列表推导式 存放指定列表中字符串的长度
例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
nums=["good", "nice", "see you", "bye"]
nums_new=[len(x) for x in nums]
print(nums_new)
d. 利用列表推导式删除列表中整数个位数小于5的元素
例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
nums=[24, 'abc', 99, True, 21, 38, 'hello']
nums_new=[x for x in nums if type(x)==int and x%10<5 ]
print(nums_new)
e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素
例如:[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)] --- [30, 'hello', 3.4, False]
nums=[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
nums_new=[x[-1] for x in nums]
print(nums_new)
f.利用列表推导式将数字列表中所有的奇数乘以2,所有的偶数除以2
例如: [23, 4, 67, 88, 90, 21] -> [46, 2, 134, 44, 45, 42]
nums=[23, 4, 67, 88, 90, 21]
nums_new=[x*2 if x%2 else x//2 for x in nums]
print(nums_new)
-
已知一个列表获取列表中指定元素所有的下标
例如:[10, 20, 34, 10, 9, 78] 10的下标:[0, 3] 20的下标:[1] 30的下标:[]
nums=[10, 20, 34, 10, 9, 78] print(nums.index(10)) print(nums.index(20)) print(nums.index(30))
-
*已知一个数字列表,写程序判断这个列表时候是连续递增列表。
例如: [1, 2, 3, 4, 5] -> True [23, 45, 78, 90] -> True [1, 3, 2, 4, 5] -> False
nums=[1, 2, 3, 4, 5] nums_1=sorted(nums) print(nums==nums_1)
-
已知两个列表,将两个列表按照下面的规律交叉合并
A = [10, 20, 30, 40, 50] B = [100, 200, 300] 结果:[10, 100, 20, 200, 30, 300, 40, 50]
A = [10, 20, 30, 40, 50] B = [100, 200, 300] i=1 for x in range(len(B)): A.insert(i,B[x]) i+=2 print(A)
-
已知两个有序列表,将两个列表合并,合并后的新列表中元素仍然是递增列表
A = [10, 20, 30, 40, 50] B = [25, 44, 60] 结果:[10, 20, 25, 30, 40, 45, 50, 60]
A = [10, 20, 30, 40, 50] B = [25, 44, 60] C = A+B C.sort() print(C)
A = [10, 20, 30, 40, 50] B = [100, 200, 300] 结果:[10, 100, 20, 200, 30, 300, 40, 50]
A = [10, 20, 30, 40, 50] B = [100, 200, 300] i=1 for x in range(len(B)): A.insert(i,B[x]) i+=2 print(A)
-
已知两个有序列表,将两个列表合并,合并后的新列表中元素仍然是递增列表
A = [10, 20, 30, 40, 50] B = [25, 44, 60] 结果:[10, 20, 25, 30, 40, 45, 50, 60]
A = [10, 20, 30, 40, 50] B = [25, 44, 60] C = A+B C.sort() print(C)