Chapter 5 列表的相关内容
Statement文章声明:仅作为个人学习笔记,一切失误概不负责。不杠不贬,文明网络环境建设!!
一.列表的相关方法
list1 = ['喜羊羊与灰太狼之框出未来', '斗破苍穹', '可不可以你也刚好喜欢我', '这个杀手不太冷静', '画江湖', '反贪风暴5', '神秘海域', '新蝙蝠侠']
- 列表增
- **list1.append(x)😗*在列表list1末尾追加元素x
list1.append('熊出没')
print(list1)
- **list1.insert(n, x)😗*在列表list1下标位置n处插入元素x
list1.insert(1, '四海')
print(list1)
- 列表修改
- **list1[n] = x:**将list1下标为n位置的元素重新赋值为x
list1[0] = '熊出没'
print(list1)
- 列表查找
- **list1.index(x, n)😗*在list1中从下标n开始从左向右查找元素x第一次出现位置,返回下标,找不到报 错.n可以省略不写,省略时默认为0
# 不设置查找起始点
print(list1.index('熊出没'))
# 设置查找起点
print(list1.index('熊出没', 1))
- 列表元素删除
- **del list[n]😗*根据下标n删除元素,找不到下标报错(下标超出报错)
del list1[9]
print(list1)
- **list.pop(n)😗*根据下标n删除元素,找不到下标不报错(下标超出不报错)
list1.pop(0)
print(list1)
- **list.remove(x)😗*根据内容删除元素,只删除从左到右找到的第一个元素,找不到元素报错
list1.remove('熊出没')
print(list1)
- **list.clear()😗*清空列表
list1.clear()
print(list1)
- 列表计数
- **list.count(x)😗*计算元素x在列表中出现的次数
list2 = ['abc', '123', 'abc']
num1 = list2.count('abc')
print(num1)
num2 = list2.count('a')
print(num2)
- 列表排序
- **list.sort()😗*默认从小到大排序(默认reverse=False)(该方法涉及比较大小,容器中数据类型需要 一致;整型,浮点型,布尔值可以相互比较)
list3 = [3, 5, 0]
list3.sort()
print(list3)
- **list.sort(reverse=True)😗*从大到小排序
list3.sort(reverse=True)
print(list3)
- **list.reverse()😗*反序输出,改变了原列表
list4 = [1, 3, 5, 'anc']
list4.reverse()
print(list4)
二.列表相关办法
三.列表推导式
# 1.列表推导式 创建列表的表达式
'''
结构1:
[表达式 for 变量 in 序列]
功能:创造一个列表
循环的每个变量代入表达式的结果作为列表的每一个元素
'''
# 练习1:提取nums中所有元素的个位数
nums = [23, 78, 562, 98, 71, 99]
# [3, 8, 2, 8, 1, 9]
print([x % 10 for x in nums])
# 练习2:将nums中所有的元素都乘以10
nums = [23, 78, 562, 98, 71, 99]
# [230, 780, 5620, 980, 710, 990]
print([x * 10 for x in nums])
'''
结构2
[表达式 for 变量 in 序列 if 条件语句]
功能:创造一个列表
循环的变量如果满足if条件,则代入表达式,结果为列表的元素
对原数据提取满足新条件的所有元素
'''
print('-------------------------------------结构2-----------------------------------')
# 练习:用推导式删除scores中小于60的元素
scores = [30, 56, 78, 91, 83, 88, 45, 57, 60]
print([x for x in scores if x >= 60])
print('------------------------------------三目运算符----------------------------------')
# python中三目运算符
'''
值1 if 条件语句 else 值2
值1 if 条件语句 else 值2 for 变量 in 序列
'''
print(['及格' if x >= 60 else '不及格' for x in scores])
day 5列表练习题
1.已知一个数字列表,求列表中心元素。
nums = [12, 65, 46, 75, 62, 99]
# 长度为偶数长度时候
if len(nums) % 2 == 0:
print(nums[int(len(nums)/2)-1], nums[int(len(nums)/2)])
# 长度为奇数长度时候
else:
print(nums[int(len(nums) / 2)])
2.已知一个数字列表,求所有元素和。
nums = [12, 65, 46, 75, 62, 99]
print(sum(nums))
3.已知一个数字列表,输出所有奇数下标元素。
nums = [12, 65, 46, 75, 62, 99]
for i in range(len(nums)):
if nums[i] % 2 == 1:
print(i)
4.已知一个数字列表,输出所有元素中,值为奇数的元素。
nums = [12, 65, 46, 75, 62, 99]
for i in range(len(nums)):
if nums[i] % 2 == 1:
print(nums[i])
5.已知一个数字列表,将所有元素乘二。
nums = [1, 2, 3, 4]
new_num = []
for i in nums:
new_num.append(i * 2)
print(new_num)
6.有一个长度是10的列表,数组内有10个人名,要求去掉重复的
names = ['张三', '李四', '大黄', '大黄', '张三', '张三', '张三']
names2 = []
for i in names:
if i not in names2:
names2.append(i)
print(names2)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分)
scores = [12, 65, 46, 75, 62, 99]
# 正向排序
scores2 = sorted(scores)
# 去掉最后一个最大的数字 不影响整体下标
scores2.remove(scores2[len(scores2)-1])
# 去掉第一个最小的数字
scores2.remove(scores2[0])
# 和除以长度个数
print(sum(scores2)/len(scores2))
8.有两个列表A和B,使用列表C来获取两个列表中公共的元素
listA = [1, 'a', 4, 90]
listB = ['a', 8, 'j', 1]
listC = []
for x in listA:
for y in listB:
if x == y:
listC.append(x)
print(listC)
9.*有一个数字列表,获取这个列表中的最大值.(注意: 不能使用max函数)
nums = [19, 89, 90, 600, 1]
# 遍历每个数字 谁大就给max_num赋值 小于就继续遍历
max_num = 0
for i in nums:
if i > max_num:
max_num = i
print(max_num)
10.*获取列表中出现次数最多的元素
nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
nums_count = []
for i in nums:
nums_count.append(nums.count(i))
# nums_count = [3, 2, 4, 3, 1, 2, 3, 4, 1, 4, 4] 对应的
# 最大次数与次数相等的位置 就是频率最高的数字
for j in nums_count:
if j == max(nums_count):
print(nums[nums_count.index(j)])
break
day 6 列表推导式练习题
- 创建一个列表,列表中有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]
nums_only = []
for i in nums:
if i not in nums_only:
nums_only.append(i)
print(nums_only)
print(sorted(nums_only, reverse=True))
- 利用列表推导式, 完成以下需求
a. 生成一个存放1-100中各位数为3的数据列表
结果为 [3, 13, 23, 33, 43, 53, 63, 73, 83, 93]
print([x for x in range(1, 101) if x % 10 == 3])
b. 利用列表推到是将 列表中的整数提取出来
例如:[True, 17, "hello", "bye", 98, 34, 21] --- [17, 98, 34, 21]
list1 = [True, 17, "hello", "bye", 98, 34, 21]
print([x for x in list1 if type(x) == int])
c.利用列表推导式 存放指定列表中字符串的长度
例如: ["good", "nice", "see you", "bye"] --- [4, 4, 7, 3]
list1 = ["good", "nice", "see you", "bye"]
print([len(x) for x in list1])
d. 利用列表推导式删除列表中整数个位数小于5的元素
# 例如:[24, 'abc', 99, True, 21, 38, 'hello'] --- ['abc', 99, True, 38, 'hello']
list1 = [24, 'abc', 99, True, 21, 38, 'hello']
print([x for x in list1 if (type(x) == str) or(type(x) == int and x % 10 >= 5) or (type(x) == bool)])
e. 利用列表推导式获取元素是元组的列表中每个元组的最后一个元素
# 例如:[(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)] --- [30, 'hello', 3.4, False]
list1 = [(10, 20, 30), ('abc', 'hello'), (1, 2, 3.4), (True, False)]
print([x[-1] for x in list1])
f.利用列表推导式将数字列表中所有的奇数乘以2,所有的偶数除以2
#例如: [23, 4, 67, 88, 90, 21] -> [46, 2, 134, 44, 45, 42]
list1 = [23, 4, 67, 88, 90, 21]
print([i * 2 if i % 2 == 1 else i // 2 for i in list1])
-
已知一个列表获取列表中指定元素所有的下标
# 例如:[10, 20, 34, 10, 9, 78] # 10的下标:[0, 3] # 20的下标:[1] # 30的下标:[] nums = [10, 20, 34, 10, 9, 78] nums10 = [] nums20 = [] nums30 = [] for i in range(len(nums)): if nums[i] == 10: nums10.append(i) print(nums10) for i in range(len(nums)): if nums[i] == 20: nums20.append(i) print(nums20) for i in range(len(nums)): if nums[i] == 30: nums30.append(i) print(nums30)
-
*已知一个数字列表,写程序判断这个列表时候是连续递增列表。
#例如: #[1, 2, 3, 4, 5] -> True #[23, 45, 78, 90] -> True #[1, 3, 2, 4, 5] -> False list1 = [1, 2, 3, 4, 5] list2 = [23, 45, 78, 90] list3 = [1, 3, 2, 4, 5] print(list1 == sorted(list1)) print(list2 == sorted(list2)) print(list3 == sorted(list3))
-
已知两个列表,将两个列表按照下面的规律交叉合并
# 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 i in range(min(len(A), len(B))): print(i) C.append(A.pop(0)) C.append(B.pop(0)) print(C+A+B)
-
已知两个有序列表,将两个列表合并,合并后的新列表中元素仍然是递增列表
# 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] print(sorted(A + B))