一、列表进阶
1.列表系统功能【重点掌握】
函数 说明 len(list) 获取列表元素个数 max(list) 返回列表元素最大值 min(list) 返回列表元素最小值 list(seq) 将元组转换为列表 list.append(obj) 在列表末尾添加新的对象 list.count(obj) 统计某个元素在列表中出现的次数 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) list.index(seq) 从列表中找出某个值第一个匹配项的索引位置 list.insert(index,obj) 将对象插入列表 list.pop(index) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 list.remove(obj) 移除列表中某个值的第一个匹配项 list.reverse() 反向列表中元素 list.sort(key=None,reverse=False) 对原列表进行排序 list.copy() 复制列表 list.clear() 清空列表
1.1增
# 注意:列表是可变的,所以涉及到列表元素的增删改的系统功能,都是在原列表内部进行的 # 1.list.append(obj)在列表末尾添加新的对象,特点:obj表示任意类型 ******* list1 = [1,2,3] print(list1) # 正确写法 list1.append(66) print(list1) # [1, 2, 3, 66] # 错误写法 # r = list1.append(77) # print(r) # None list1.append([4,5,6]) print(list1) # [1, 2, 3, 66, [4, 5, 6]] print(list1[-1]) list1.append('abc') print(list1) # [1, 2, 3, 66, [4, 5, 6], 'abc'] print('*' * 50) # 2.list.extend(iterable)在列表末尾一次性追加另一个序列中的多个值(用新列表中的元素扩展原来的列表) # list += [x1,x2....] # 特点:extend(iterable),iterable包括字符串,列表,元组,字典,集合,range()等 list2 = [1,2,3] print(list2) # list2.extend(True) # print(list2) # TypeError: 'int' object is not iterable list2.extend('abc') print(list2) # [1, 2, 3, 'a', 'b', 'c'] list2.extend([4,5,6]) print(list2) # [1, 2, 3, 'a', 'b', 'c', 4, 5, 6] # 3.list.insert(index,obj)将数据插入到列表的指定索引处,原元素向后顺延, # 特点:obj表示任意类型,同append,如果追加或插入的是iterable,则作为一个整体添加到原列表 list3 = [1,2,3] print(list3) list3.insert(0,'abc') print(list3) # ['abc', 1, 2, 3] list3.insert(2,[45,78,9]) print(list3) # ['abc', 1, [45, 78, 9], 2, 3] list3.insert(2,66) print(list3)
1.2删
# 1.list.remove(obj)移除列表中某个值的第一个匹配项 ******* list1 = [34,6,7,6,90,6,88,199] print(list1) # 注意1:remove执行一次,只能删除从左往右的第一个元素 list1.remove(6) print(list1) list1 = [34,6,7,6,90,6,88,199] for _ in range(3): list1.remove(6) print(list1) # 注意2:在实际使用中,建议尽量先判断元素是否存在,然后执行删除的操作 num = 17 # list1.remove(num) # ValueError: list.remove(x): x not in list if num in list1: list1.remove(num) # 2.list.pop(index)移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 ****** list2 = [34,6,7,6,90,6,88,199] print(list2) # 注意1:默认移除列表中的最后一个元素 list2.pop() print(list2) # 注意2:也可以指定索引,移除列表中指定索引处的元素 list2.pop(1) print(list2) # 注意3:pop表示弹出,remove表示删除, r = list2.pop() print(list2) print(r) # 88 # 错误写法 # r = list2.remove(6) # print(r) # None # 3.list.clear()清空列表 list3 = [34,6,7,6,90,6,88,199] print(list3) list3.clear() print(list3) # 4.del list[index] list4 = [34,6,7,6,90,6,88,199] print(list4) del list4[0] # 等价于list4.pop(0) print(list4) # 问题:del list4和list4.clear()的作用相同吗 """ del list4:表示删除列表,列表本身不存在 list4.clear():只是清空列表,列表本身是存在的 """
1.3改
# 1.list.sort(key=None,reverse=False)对原列表进行排序 ****** # 注意:默认情况下,列表中的元素相互之间可以比较大小的情况下,才能执行排序 # 升序 list1 = [24,46,2,56,8,9,100,45,7,8] print(list1) list1.sort() print(list1) # 降序 list1 = [24,46,2,56,8,9,100,45,7,8] print(list1) list1.sort(reverse=True) print(list1) # 2.list.reverse()反向列表中元素 ****** list2 = [24,46,2,56,8,9,100,45,7,8] print(list2) list2.reverse() print(list2)
1.4查
list1 = [34,6,7,6,90,6,88,199] print(list1) # 1.len(list)获取列表元素个数 ******** print(len(list1)) # 2.max(list)返回列表元素最大值 print(max(list1)) # 3.min(list)返回列表元素最小值 print(min(list1)) # 4.list.count(obj)统计某个元素在列表中出现的次数 ****** c = list1.count(6) print(c) for _ in range(c): list1.remove(6) print(list1) # 5.list.index(obj)从列表中找出某个值第一个匹配项的索引位置 list1 = [34,6,7,6,90,6,88,199] print(list1) i = list1.index(6) print(i) # index()实现的原理 for i in range(len(list1)): if list1[i] == 6: print(i) break # 如果要获取一个数据在列表中重复出现的索引,则循环遍历 for i in range(len(list1)): if list1[i] == 6: print(i) list1[a:n:x]表示索引为a到n-1中的元素,步长为x。注意,这里的范围是左闭右开,即包含起始索引,不包含结束索引。 print(list1[4:7])表示打印列表names中索引为4到6的元素。 print(list1[2:11:2])表示打印列表中索引2-10的元素,步长为2 print(list1[-3:]) 表示打印列表最后的三个元素
2.列表推导式【重点掌握】
列表推导式,就是指的轻量级循环创建列表的方式
列表推导式/列表生成式:是Python特有的语法,通过循环和if语句专门用来创建列表特点:根据一个已知的Iterable,使用一行代码实现简单的逻辑,生成一个新的列表
语法:[新列表中元素的规律 for循环 if判断]工作原理:指定for循环,获取已知iterable中的元素,结合if进行判断,最终得到新的列表中元素的规律作用:生成列表
""" 语法:[新列表中元素的规律 for循环 if判断] 工作原理:指定for循环,获取已知iterable中的元素,结合if进行判断,最终得到新的列表中元素的规律 作用:生成列表 """ # 1.已知列表numlist = [34,6,7,8,23,6],生成一个新的列表,新列表中的元素是numlist中元素的2倍 numlist = [34,6,7,8,23,6] list11 = [] for num in numlist: list11.append(num * 2) # list11 += [num * 2] print(list11) list12 = [num * 2 for num in numlist] print(list12) # 2.将1~100中3或7的倍数挑出来,生成一个新的列表 list21 = [] for num in range(1,101): if num % 3 == 0 or num % 7 == 0: list21.append(num) print(list21) list22 = [num for num in range(1,101) if num % 3 == 0 or num % 7 == 0] print(list22) # 练习:已知列表list1 = [34,56,72,5,67,8,1,5,678],将其中的偶数挑出,生成一个新的列表 list1 = [34,56,72,5,67,8,1,5,678] new_list = [n for n in list1 if n % 2 == 0] print(new_list) # 3.在列表推导式中,for语句和if语句根据需求可以书写多个,从左往右表示嵌套 # a. list31 = [a + b for a in 'abc' for b in '123'] print(list31) # 9 # 等价于: list31 = [] for a in 'abc': for b in '123': list31.append(a + b) print(list31) # 9 # b list32 = [n for n in range(100) if n % 3 == 0 if n % 5 == 0] # 等价于 list32 = [] for n in range(100): if n % 3 == 0: if n % 5 == 0: list32.append(n) print(list32)
3.二维列表
# 1.元素的访问
# 一维列表
list1 = [34,7,True,'abgaf',345.678]
print(list1)
print(list1[0])
print(list1[-1])# 二维列表
# 二维列表的处理思路:当作一维列表处理
list2 = [[34,6,78],[34,6],[23,76,87,9,0]]
print(len(list2))
print(list2[0])
print(list2[-1])print(list2[1][1])
print(list2[-1][-2])# 2.遍历
list2 = [[34,6,78],[34,6],[23,76,87,9,0]]for sublist in list2:
for num in sublist:
print(num)for i in range(len(list2)):
for j in range(len(list2[i])):
print(list2[i][j])