day6
容器:list(列表)
方法:
sum(): | len(): | max(): | |||
---|---|---|---|---|---|
求列表和 | 求列表项数 | 求列表最大项 | |||
enumerate(): | append(元素) | .insert(下标,元素) | |||
列举 | 增 | 增 | |||
del 列表 [下标] | 列表.remove(元数) | pop | |||
删 | 删 | 取出 | |||
列表[下标]=新元素 | |||||
改 | |||||
-
什么是列表(list)
-
非容器 - 一个变量只能保存一个数据(只有一个格子的盒子)
容器 - 一个变量可以同时保存多个数据(有多个格子的盒子)
-
列表是容器型数据类型(一个列表可以同时保存多个数据);将[]作为容器的标志,里面多个元素用逗号隔开:[元素1,元素2,元素3,…]
-
列表是可变的(可变指的是列表中的元素的个数,元素的值和元素的顺序可变)
-
元素的要求 - 没有要求
任何类型的数据,都可以作为列表的元素,而且同一个列表可以同时保存不同类型的数据
- 空列表
- 列表元素类型可以一样也可以不一样
-
-
查 - 获取列表元素
-
查单个 - 获取一个元素
-
语法:
列表[下标] - 获取指定下标对应的元素
-
说明:
列表 - 任何结果是列表的表达式,一般用保存列表的变量
[] - 固定写法
下标 - 下标又叫索引,它是序列中元素在列表中的位置信息。列表中每个元素都有两个下标值:一个是从0开始依此增长的下标值(0表示第一个元素,1表示第2个元素)
一个是从-1开始依次减少的下标值(-1表示倒数第一个元素,-2表示倒数第二个元素)
注意:下标不能越界,下标有范围:0 ~ 长度 -1 和 -1 ~ - 长度
len(列表) - 获取列表中元素的个数(获取列表的长度)
-
-
切片 - 获取部分元素
-
语法:
列表[开始下标:结束下标:步长]
-
说明:开始下标、结束下标 - 下标值;用来确定切片的有效范围:[开始下标,结束下标]
-
步长 - 正整数或者负整数;用正负号来决定获取的方向(正-从请往后取;负-从后往前取),用绝对值来决定是否跳着取,跳几个
-
:固定写法
-
获取原理:
如果步长对应的方向和开始下标对应的元素到结束下标对应的元素的方向不一致,切片无效,结果是空列表
如果切片有效,先确定有效范围([开始下标,结束下标]),然后在有效范围内根据步长方向按照步长的绝对值获取元素,创建新的列表
-
-
省略语法
列表[开始下标:结束下标:步长]
- 省略步长:列表[开始下标:结束下标 ] - 省略步长,步长就是1
- 省略开始下标:列表[:结束下标:步长] - 如果步长为正就从第一个素开始往后取,如果步长为负就从最后一个元素开始玩后取。
- 省略结束下标:列表[开始下标::步长] -如果步长为正取到最后一个元素为止;如果步长未负取到第一个元素为止。
-
遍历 - 一个一个的取,取完为止
-
方法一: - 直接获取元素
for 元数 in 列表:
(变量依次获取的是列表中的每个元素)
-
方法二: - 先获取元素下标,在根据下标获取元素
for 下标 in range(len(列表)):
(变量获取的是元素的下标)
-
方法三:
for 下标 ,元素 in enumerate(列表):
同时获取列表元素和下标
-
-
-
列表增删改操作
-
增 - 添加元素
- 列表.append(元素) -在列表的最后添加指定元素
- 列表.insert(下标,元素) - 在指定下标对应的元素前插入指定元素
-
删 - 删除列表元素
-
del 列表 [下标] - 删除列表中指定下标对应的元素
-
列表.remove(元数) - 删除列表中的指定元素(如果元素不存在会报错;如果元素有多个只删前面的哪一个)
-
列表.pop() - 取出列表最后一个元素,并且返回
列表.pop(下标) - 取出指定下标对应的元素,并且返回
-
-
改 - 修改元素的值
- 列表[下标]=新元素
-
作业
1. 基础题
-
已知一个数字列表,打印列表中所有的奇数
print('\n作业1') list_1 = [65,456,898,41,2,5,8,7,56,78,98] for x in list_1: if x % 2: print(x)
-
已知一个数字列表,打印列表中所有能被能被3整除但是不能被2整除的数
print('\n作业2') list_1 = [] for x in range(100): if x % 3 == 0 and x % 2: list_1.append(x) print(list_1)
-
已知一个数字列表,计算所有偶数的和
print('\n作业3') list_1 = [] for x in range(100): list_1.append(x) print(sum(list_1[::2]))
-
已知一个数字列表,统计列表中十位数是
1
的数的个数print('\n作业4') list_1 = [] r = 0 for x in range(100): if x % 100 // 10 == 1 : r += 1 list_1.append(x) print(r)
-
已知一个列表,获取列表中下标为奇数是所有元素(从0开始的下标值)
例如: list1 = [10, 20, 5, 34, 90, 8]
结果:[20, 34, 8]
print('\n作业5') list_1 = [] r = 0 n = 100 for x in range(n,2 * n): list_1.append(x) for y in range(1,n,2): print(list_1[y])
-
已知一个数字列表,将列表中所有元素乘以2
例如: nums = [10, 3, 6, 12] 乘2后: nums = [20, 6, 12, 24]
print('\n作业6') nums = [10, 3, 6, 12] for x in range(len(nums)): nums[x] *= 2 print(nums)
-
已知一个列表,获取列表的中心元素
例如:nums = [10, 2, 6, 12] -> 中心元素为: 2和6
nums = [10, 2, 6, 12, 10] -> 中心元素为:6
print('\n作业7') nums = [10, 2, 6, 12] a = len(nums) if a % 2 : print(nums[a // 2]) else: print(nums[a // 2 - 1],nums[a // 2])
-
已知一个列表,获取列表中所有的整型元素
例如:list1 = [10, 1.23, ‘abc’, True, 100, ‘hello’, ‘20’, 5]
结果是: [10, 100, 5]
print('\n作业8') list1 = [10, 1.23, 'abc', True, 100, 'hello', '20', 5] for x in range(len(list1)): y = list1[x] if type(y) == int: print(y)
2. 进阶题
-
定义一个列表保存多个学生的分数,删除列表中所以低于60分的值
例如: scores = [45, 60, 89, 30, 12, 59, 99, 80, 71, 66] 删除后: scores = [60, 89, 99, 80, 71, 66]
scores = [45, 60, 89, 30, 12, 59, 99, 80, 71, 66] a = len(scores) for z in range(a): x = scores.pop() if x >= 60 : scores.insert(0,x) print(scores)
-
已知一个列表保存了多个学生的姓名,要求去掉列表中重复的名字
例如:names = [‘小明’, ‘张三’, ‘李四’, ‘张三’, ‘张三’, ‘小明’, ‘王五’, ‘王五’]
去重后:names = [‘小明’, ‘张三’, ‘李四’, ‘王五’]
-
已知一个数字列表,获取列表中值最大的元素 (不能使用max函数)
-
已知两个有序列表(列表中的元素已经按照从小到大的方式排好序),要求合并两个列表,合并后元素还是从小到大排序
例如: list1 = [10, 23, 39, 41, 52, 55, 80] list2 = [9, 38, 55, 70]
合并后的结果: [9, 10, 23, 38, 39, 41, 52, 55, 55, 70, 80]
-
已知一个有序数字列表(从小到大),输入任意一个数字,将输入的数字插入列表中,要求插入后列表仍然保持从小到大排序的关系
例如: list1 = [10, 23, 45, 67, 91] 输入: 50 -> list1 = [10, 23, 45, 50, 67, 91]