Learning Diary for Python - 6
一、列表相关操作
1.数学运算符
-
加法运算: - +
-
列表1+列表2 - 将两个列表合并成一个新的列表
#新列表顺序和进行加法时位置相关 list1=[1,2,3] list2=[1,4,6,88] result=list1+list2 print(result)#[1, 2, 3, 1, 4, 6, 88]
-
-
乘法运算
-
列表*N - 将列表中的元素重复产生N次
list1=[1,2,3] print(list1*3)#[1, 2, 3, 1, 2, 3, 1, 2, 3]
-
-
比较
-
比较相等:==、!=
lsit1=[10,20,30] print(list1==[10,20,30])#True print(list1==[10,30,20])#False
-
比较大小:>、<、>=、<=
-
两个列表比较大小、比较的是第一对不相等的元素大小
#与元素个数无关,只比较第一对不相等元素 list1=[10,1,5,10,12,555] list2=[10,10,555] print(list1>list2)#False #有比没有大 list1=[1,2,10] list2=[1,2,10,-999] print(list1>list2)#False #第一对不相等的元素种类不同则会报错 list1=[1,2,10,'y'] list2=[1,2,10,'x'] print(list1>list2)#报错 #字符串也可比较 list1=[1,2,10,'y'] list2=[1,2,10,'x'] print(list1>list2)#True
-
-
2.in 和 not in
-
元素 in 列表 - 判断指定列表中是否存在指定元素
-
元素 not in列表 - 判断指定列表中是否不存在指定元素
print(10 in [10,20,30])#True print(100 not in [10,20,30])#True print([10,20]in [10,20,30])#False print([10,20]in [[10,20],50])#True
二、相关函数(系统函数)
1.求和
-
格式:sum(列表)
-
求列表中所有元素的和(只能用于数字列表)
#1+2+3+...+100 print(sum(range(1,101)))#5050
2.求极值
-
格式:max(列表)、min(列表)
-
将列表中的元素从小到大排序
num=[1,2,3,4,10,400,-15] print(max(num))#400 print(min(num))#-15
3.排序
-
格式:sort(列表)
-
将列表中的元素从小到大依次排列后产生一个新的列表
-
不会改变原列表的顺序
#从小到大 list=[1,2,3,77,34,-1,23] list2=sorted(list) print(list)#[1, 2, 3, 77, 34, -1, 23] print(list2)#[-1, 1, 2, 3, 23, 34, 77] #从大到小 list=[1,2,3,77,34,-1,23] list2=sorted(list,reverse=True) print(list)#[1, 2, 3, 77, 34, -1, 23] print(list2)#[77, 34, 23, 3, 2, 1, -1]
4.list
-
可将其他数据转换成列表
#只有容器型数据能转换为列表 result=list('abc') print(result) #['a', 'b', 'c'] #其他序列转换为列表时直接将序列的元素作为列表的元素 result=list(range(5)) print(result) #[0, 1, 2, 3, 4]
三、相关方法
1.方法使用的套路
#列表.xxx()
list.append()
list.sort()
list.clear()
lsit.copy()
2.clear
-
清空列表
-
列表.clear
list1=[1,2,3,4] list1.clear() print(list1)#[]
3.copy
-
复制指定列表产生一个一样的新列表,将新的列表返回
-
列表.copy()
#注!直接用变量给另一个变量赋值,会导致两个变量指向同一内存 list1=[1,2,3,4] list2=list1 list1.append(15) print(list2)#[1, 2, 3, 4, 15] list1=[1,2,3,4] list2=list1.copy() list1.append(15) print(list2)#[1, 2, 3, 4]
4.count
-
统计变量中指定元素的个数
-
列表.count(元素)
list=[1,2,4,4,4,15,2] print(list.count(4))#3 print(list.count(2))#2 print(list.count(999))#0
5.extend
-
将序列中所有的元素都添加到列表中
-
列表.extend(序列)
#extend 将序列中的元素依次添加 list=[1,2,3] list.extend([20,30]) print(list)#[1, 2, 3, 20, 30] #append 将序列作为一个元素添加 list=[1,2,3] list.append([20,30]) print(list)#[1, 2, 3, [20, 30]]
6.index
-
获取元素的下标
-
列表.index(元素)
list=[12,89,7,65,23,89] print(list.index(12))#0 print(list.index(65))#3 print(list.index(120))#报错 print(list.index(89))#1 反回先索引到的元素下标
7.reverse
-
反向列表中元素
list=[1,6,4,2,77,1] list.reverse() print(list)#[1, 77, 2, 4, 6, 1]
8.sort
-
对列表进行排序
-
sort对原列表进行排序
-
sorted是产生一个原列表重新排序的新列表
#sort list=[1,6,4,2,77,1] list.sort() print(list)#[1, 1, 2, 4, 6, 77] #sorted list=[1,6,4,2,77,1] list1=sorted(list) print(list1)#[1, 1, 2, 4, 6, 77] print(list)#[1, 6, 4, 2, 77, 1]
四、列表推导式
1.定义
穿件列表的表达式
2.功能
对元素进行变换和筛选
3.结构
-
结构一
- 表达式
结构: [表达式 for 变量 in 序列] 原理: 创建一个列表(让变量取序列中取值计算,将结果作为新列表的元素
- 练习
nums=[28,10,81,301,22] #将列表的所有元素乘2,转换为一个新的列表 nums=[28,10,81,301,22] nums2=[i*2 for i in nums] print(nums2) #基于nums得到[8,0,1,1,2] nums2=[i%10 for i in nums] print(nums2) #基于nums得到[10,1,9,4,4] nums2=[i//100+i//10%10+i%10 for i in nums] print(nums2) #基于nums得到[True,True,False,False,True] nums2=[i%2==0 for i in nums] print(nums2)
-
结构二
- 表达式
结构: [表达式 for 变量 in 序列 if 条件语句] 原理: 创建一个列表(让变量取序列中取值并进行判断,通过判断再计算,将结果作为新列表的元素 作用: 将原序列中的元素按照指定规则(表达式)进行统一变换得到的列表
- 练习
#取10到30之间的奇数 num2=[i for i in range(10,31) if i%2] print(num2) #基于nums得到[81,301] nums=[28,10,81,301,22] num2=[i for i in nums if i%2] print(num2) #基于list1,得到[10,20] list1=[10,'12,3',1.23,20,'abc',True] nums=[i for i in list1 if type(i)==int] print(nums) #基于分数列表,提取类表中的所有及格分数 scores=[18,89,67,90,45,34,12,89] scores=[i for i in scores if i>=60] print(scores)
五、元组
1.认识元组(tuple)
-
是容器
#空元组 t=() #单个元素的元组(重要) - 必须再唯一的元素后加逗号 (1)不加逗号 t=(20) print(t,type(t))#20 <class 'int'> (2)加逗号 t=(20,) print(t,type(t),len(t))#(20,) <class 'tuple'> 1
-
是不可变的列表
-
用()作为容器的标志,多个元素用,隔开(元素1,元素2…)
-
不支持增删改操作
-
有序的
2.操作
-
列表和增删改无关的操作元组都支持
-
查
name=(1,2,3,4,5,6,7) print(name[1],name[-1]) #2 7 print(name[1:-1:2]) #(2, 4, 6)
-
相关操作
print((10,20)+(100,200)) #(10, 20, 100, 200) print((10,20)*3) #(10, 20, 10, 20, 10, 20) print((10,20)=(20,10)) #False print(10 in (10,20)) #True
-
相关函数
- 不涉及更改的均支持(sort不支持,sorted支持)
-
部分相关方法
- count
- index
#count a=(10,20,30,30,30,40) print(a.count(30)) #index a=(10,20,30,30,30,40) print(a.index(30))#返回首次匹配到的元素下标
-
元组不只是不可变的列表
- 单元素的元组(元素,)
- 在没有歧义的情况下,可以省略()
t1 = (10, 20, 30) t2 = 10, 20, 30 print(t1, t2) # (10, 20, 30) (10, 20, 30)
- 获取元素的时候,可以让变量的个数和元祖中元素个数一致
#变量和元素个数一致 t1 = (10, 20, 30) x, y, z = t1 print(x, y, z) # 10 20 30 #变量和元素个数不一致(优先为没有*的赋值,剩余的均赋给带*的) num=[1,2,3,4,5,6,7,8,9] x, *y =num print(x,y) #1 [2, 3, 4, 5, 6, 7, 8, 9] *x, y =num print(x,y)#[1, 2, 3, 4, 5, 6, 7, 8] 9 x, *y, z =num print(x,y,z)#1 [2, 3, 4, 5, 6, 7, 8] 9
六、练习题
- 创建一个列表,列表中有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]
list=[70, 88, 91, 70, 107, 234, 91, 177, 282, 197]
list2=[]
for i in list:
if i in list2:
continue
else:
list2.append(i)
print(list2)
list2.sort(reverse=True)
print(list2)
- 利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
#方法一
list=[i for i in range(3,101,10) ]
print(list)
#方法二
list=[i for i in range(1,101) if i %10==3 ]
print(list)
b. 利用列表推导式将列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
list=[True, 17, "hello", "bye", 98, 34, 21]
list2=[i for i in list if type(i)==int]
print(list2)
c.利用列表推导式 存放指定列表中字符串的长度
例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
list=["good", "nice", "see you", "bye"]
list2=[len(i) for i in list]
print(list2)
d. 利用列表推导式删除列表中整数个位数小于5的元素
例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
list=[24, 'abc', 99, True, 21, 38, 'hello']
list2=[i for i in list if type(i)==int]
list3=[i for i in list2 if i%10<5]
list4=[i for i in list if not i in list3]
print(list4)
e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素
例如:[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)] --- [30, 'hello', 3.4, False]
list=[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
list2=[i for i in list if type(i)==tuple]
list3=[i[-1] for i in list2]
print(list3)
f.利用列表推导式将数字列表中所有的奇数乘以2,所有的偶数除以2
例如: [23, 4, 67, 88, 90, 21] -> [46, 2, 134, 44, 45, 42]
list=[23, 4, 67, 88, 90, 21]
list2=[int( i*(2 if i%2==1 else 0.5)) for i in list ]
print(list2)
-
已知一个列表获取列表中指定元素所有的下标
例如:[10, 20, 34, 10, 9, 78] 10的下标:[0, 3] 20的下标:[1] 30的下标:[]
list=[10, 20, 34, 10, 9, 78] i=int(input('请输入要查询的数字:')) index1=[] while i in list: index1.append(list.index(i)) list.remove(i) list.insert(0,'') print(index1)
-
*已知一个数字列表,写程序判断这个列表是否是连续递增列表。
例如: [1, 2, 3, 4, 5] -> True [23, 45, 78, 90] -> True [1, 3, 2, 4, 5] -> False
list=[1, 3, 2, 4, 5] i=list[0] for x in list: if x >=i: i=x else: print(x >=i) break else: print(x >=i)
-
已知两个列表,将两个列表按照下面的规律交叉合并
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] C=[] for x in range(min(len(A),len(B))): C.append(A[x]) C.append(B[x]) C.extend(A[len(B):len(A)]) print(C)
-
已知两个有序列表,将两个列表合并,合并后的新列表中元素仍然是递增列表
A = [10, 20, 30, 40, 50] B = [25, 44, 60] 结果:[10, 20, 25, 30, 40, 44, 50, 60]
A = [10, 20, 30, 40, 50] B = [25, 44, 60] C=A+B C.sort() print(C)