列表
01 认识列表
什么是列表( list )
-
长什么样
-
列表是容器型数据类型(一个列表可以同时保存多个数据);
-
将 [] 作为容器的标志,里面多个元素用逗号隔开:[元素1,元素2,元素3…]
-
-
特点
-
列表是可变的 (指的是列表中元素的个数、元素的值和元素的顺序可变);
-
列表是有序的 (每个元素都有位置对应的索引值)
[10,20,,30] -> [10,20,30,40]
[10,20,,30] -> [10,20]
[10,20,,30] -> [100,20,30]
[10,20,,30] -> [30,20,10]
-
-
元素的要求
任何类型的数据都可以作为列表的元素;同一个列表可以保存不同类型的数据。
-
空列表
list = [] print(list) -
列表中元素类型可以一样也可以不一样
list1 = [10,34,56,543] print(list1) list2 = [213,'abc',True,None] print(list2) list3 = [10,[1,10],20] print(list3)
-
02 列表查的基本操作
查 ---- 获取列表元素
-
查单个 - 获取一个元素
-
语法:
列表[下标] - 获取指定下标的元素
-
说明:
列表 - 任何结果是列表的表达式,一般用保存列表的变量
[] - 固定写法
下标 - 下标又叫索引,它是有序序列中元素在序列中的位置信息。列表中的每一个元素都有两个下标值,一个是从零开始增加的下标值(0表示第一个元素,1表示第二个元素,…);一个是从-1开始依次减少的下标值( -1 表示倒数第一个元素,-2 表示倒数第二个元素,…)
num = [10,78,19,7] print(num[0],num[-4])注意:下标不能越界,下标有效范围:0-长度-1 和 -1 ~ -长度 。
len(列表) - 获取列表中元素的个数(获取列表长度)
-
-
切片 - 获取部分元素
-
完整语法:
列表[开始下标:结束下标:步长]
说明:
开始下标、结束下标 - 下标值;用来确定切片的有效范围:[开始下标,结束下标)
步长 - 正整数和负整数;用正负号来决定获取的方向(正–从前往后取;负 – 从后向前取),用绝对值来决定获取时是否跳着取,跳几个。
获取原理:
- 如果步长对应的方向和开始下标对应的元素带结束下标对应的元素的方向不一致,切片无效,结果是空列表。
- 如果切片有效,先确定有效范围 [开始下标,结束下标) ,然后在有效范围内根据步长的方向按照步长的绝对值获取元素,创建新的列表。
x = [1,2,3,4,5,6,7,8,9] print(x[0:-1:3]) # [1, 4, 7] print(x[0:-1:-1]) # [] print(x[-1:0:-2]) # [9, 7, 5, 3] -
问题:如果从前往后需要取到最后一个元素或者从后向前取想要取到第一个元素怎么做?
- 方法一:结束下标越界
- 方法二:省略结束下标
-
省略语法
列表[开始下标:结束下标:步长]
-
省略步长:列表[开始下标:结束步长] - 省略步长,步长就是1。
x = [1,2,3,4,5,6,7,8,9] print(x[1:5]) -
省略开始下标:列表[:结束下标:步长] - 如果步长为正就从第一元素开始往后取;如果步长为负就从最后一个元素开始往前取。
x = [1,2,3,4,5,6,7,8,9] print(x[:-2:1]) x = [1,2,3,4,5,6,7,8,9] print(x[:0:-1]) -
省略结束下标:列表[开始下标::步长] - 如果步长为正取到最后一个元素为止;如果步长为负取到第一个元素为止。
x = [1,2,3,4,5,6,7,8,9] print(x[1::2]) x = [1,2,3,4,5,6,7,8,9] print(x[-1::-2]) x = [1,2,3,4,5,6,7,8,9] print(x[2:]) x = [1,2,3,4,5,6,7,8,9] print(x[::-1]) x = [1,2,3,4,5,6,7,8,9] print(x[:])
-
-
-
遍历 - 一个一个的取,取完
-
方法一:
for 元素 in 列表: - (变量依次获取的是列表中的每个元素)
num = [1,2,3,4,5,6,7,8,9] for x in num: print(x) -
方法二:
for 下标 in range(len(列表)): - 先获取元素下标,再根据下标获取元素。(变量取到的是元素的下标)。
num = [1,2,3,4,5,6,7,8,9] for x in range(len(num)): print(num[x]) -
方法三:
for 下标,元素 in enumerate(列表): - 同时获取列表元素和下标
nums = [34, 56, 78, 9, 23] for index,item in enumerate(nums): print(index, item)
-
03 列表增删改操作
-
增 - 添加元素
-
列表.append(元素) - 在指定列表的最后添加指定元素
nums = [20,30] nums.append(100) print(nums) # [20, 30, 100] -
列表.insert(下标,元素) - 在指定下标对应前插入指定元素
num = [20,30,50] num.insert(-1,40) print(num) # [20, 30, 40, 50] nums = [11,44,34,54,67,77,97,45] result = [] for x in nums: if x % 2 == 0: result.append(x) print(result)
-
-
删 - 删除列表元素
-
del 列表[下标] - 删除列表中指定下标对应的元素
nums = [11,44,34,54,67,77,97,45] del nums[-1] print(nums) # [11, 44, 34, 54, 67, 77, 97] -
列表.remove(元素) - 直接删除列表中的指定元素(元素不存在,报错;如果元素有多个相同的元素,只删除最前面的一个)
nums = [11,44,34,54,67,77,97,45] nums.remove(45) print(nums) # [11, 44, 34, 54, 67, 77, 97] -
列表.pop() - 取出列表中最后一个元素
nums = [11,44,34,54,67,77,97,45] nums.pop() print(nums) # [11, 44, 34, 54, 67, 77, 97]列表.pop(下标) - 取出列表中指定下标对应的元素
nums = [11,44,34,54,67,77,97,45] nums.pop(2) print(nums) # [11, 44, 54, 67, 77, 97, 45]pop 取出并返回,取出后只在当前列表取出,并不是彻底删除
nums = [11,44,34,54,67,77,97,45] x = nums.pop(2) print(nums,x) # [11, 44, 54, 67, 77, 97, 45] 34
-
-
改 - 修改元素的值
列表[下标] = 新元素
nums = [11,44,34,54,67,77,97,45] nums[0] = 20 print(nums) # [20, 44, 34, 54, 67, 77, 97, 45]
1. 基础题
-
已知一个数字列表,打印列表中所有的奇数
nums = [12,11,23,43,44,22] for x in nums: if x % 2: print(x) -
已知一个数字列表,打印列表中所有能被能被3整除但是不能被2整除的数
nums = [12,11,21,43,44,22] for x in nums: if x % 3 == 0 and x % 2: print(x) -
已知一个数字列表,计算所有偶数的和
nums = [12,11,21,43,44,22] result = 0 for x in nums: if x % 2 == 0: result += x print(result) -
已知一个数字列表,统计列表中十位数是
1的数的个数nums = [12,111,211,43,414,22] count = 0 for x in nums: if x // 10 % 10 == 1: count += 1 print(count) -
已知一个列表,获取列表中下标为奇数是所有元素(从0开始的下标值)
例如: list1 = [10, 20, 5, 34, 90, 8]
结果:[20, 34, 8]
list1 = [10, 20, 5, 34, 90, 8] print(list1[1::2]) -
已知一个数字列表,将列表中所有元素乘以2
例如: nums = [10, 3, 6, 12] 乘2后: nums = [20, 6, 12, 24]
方法一: new_nums = [] nums = [10, 3, 6, 12] for x in nums: new_nums.append(x *2) print(new_nums) 方法二: nums = [10, 3, 6, 12] for index,item in enumerate(nums): nums[index] = item * 2 print(nums) -
已知一个列表,获取列表的中心元素
例如:nums = [10, 2, 6, 12] -> 中心元素为: 2和6
nums = [10, 2, 6, 12, 10] -> 中心元素为:6
nums = [10, 2, 6, 12, 10] count = len(nums) if count % 2 == 1: print(nums[count//2]) nums = [10, 2, 6, 12] count = len(nums) if count % 2 == 0: print(nums[count//2-1],nums[count//2]) -
已知一个列表,获取列表中所有的整型元素
例如:list1 = [10, 1.23, ‘abc’, True, 100, ‘hello’, ‘20’, 5]
结果是: [10, 100, 5]
result = [] for x in list1: if type (x) == int: result.append(x) print(result)
2. 进阶题
-
定义一个列表保存多个学生的分数,删除列表中所以低于60分的值
例如: scores = [45, 60, 89, 30, 12, 59, 99, 80, 71, 66] 删除后: scores = [60, 89, 99, 80, 71, 66]
result = [x for x in scores if x >= 60] print(result) -
已知一个列表保存了多个学生的姓名,要求去掉列表中重复的名字
例如:names = [‘小明’, ‘张三’, ‘李四’, ‘张三’, ‘张三’, ‘小明’, ‘王五’, ‘王五’]
去重后:names = [‘小明’, ‘张三’, ‘李四’, ‘王五’]
new_names = [] for name in names: if name not in new_names: new_names.append(name) print(new_names) -
已知一个数字列表,获取列表中值最大的元素 (不能使用max函数)
max1 = nums[0] for x in nums[1:]: if x > max1: max1 = x print(max1) -
已知两个有序列表(列表中的元素已经按照从小到大的方式排好序),要求合并两个列表,合并后元素还是从小到大排序
例如: list1 = [10, 23, 39, 41, 52, 55, 80] list2 = [9, 38, 55, 70]
合并后的结果: [9, 10, 23, 38, 39, 41, 52, 55, 55, 70, 80]
new_scores = sorted(list2 + list1) print(new_scores) -
已知一个有序数字列表(从小到大),输入任意一个数字,将输入的数字插入列表中,要求插入后列表仍然保持从小到大排序的关系
例如: list1 = [10, 23, 45, 67, 91] 输入: 50 -> list1 = [10, 23, 45, 50, 67, 91]
value = int(input('请输入一个整数:')) for index, item in enumerate(list1): if item > value: list1.insert(index, value) break else: list1.append(value) print(list1)
3491



被折叠的 条评论
为什么被折叠?



