1. 查找最大元素的索引
编写函数 indicesOfLargestElement(list),输入整数列表list, 返回 list 中最大元素所有的索引,索引以列表形式返回。
例子:
IndexOfLargestElement([2, 1, 3, 1, 3]) # return [2,4]
(1)具体思路
通过max函数获取列表中的最大值,并通过循环在列表中查找,如果当前值等于最大值,则将下标存入列表中。
(2)编程实现
# 定义函数 def IndexOfLargestElement(list): return [i for i, a in enumerate(list) if a == max(list)] # 主函数 temp = [] print("Please input numbers to end with -1:") # 循环获取输出 while True: a = eval(input()) if a == -1: break temp.append(a) # 进行输出 print(IndexOfLargestElement(temp))
函数部分通过enumerate()对列表进行遍历,并通过max函数获取列表中的最大值,并通过循环在列表中查找,如果当前值等于最大值,则将下标存入列表中。
主函数部分先定义空列表,使用while循环读入数字并以-1结束,若输入值为-1则break出循环,若不为-1则存入列表中。完成列表元素读入后调用函数并输出。
(3)运行并测试
①开始运行程序,将提示输入数字并以-1结尾:
②完成输入后即输出结果:
2. 合并两个排序的列表
编写函数 merge(list1, list2),将两个排序好的整数列表合并到一个新的排序列表中,返回这个新的列表。
使用两种方法实现 merge 函数:
不使用 sort() 或 sorted();
使用 sort() 或 sorted()。
例子:
merge([2, 4, 7], [1,5,6]) # return [1, 2, 4, 5, 6, 7]
(1)具体思路
a.不使用 sort() 或 sorted()
分别通过变量记录两列表的第一个数字,比较两数大小,将较小的存入结果列表中并将该索引值加一,再次进行比较。按照以上规律一直循环操作下去,直至一列表中全部数字存入结果列表时,将另一列表中所有元素再依次存入结果列表。
b.使用 sort() 或 sorted()
通过’+’将两个列表合并后直接调用sort进行排序并输出。
(2)编程实现
# 使用sort进行排序 def merge_with_sort(list1, list2): res = list1+list2 res.sort() return res # 不使用sort进行排序 def merge_without_sort(list1, list2): # 定义两列表初始索引 i = 0 j = 0 res = [] # 依次访问两序列进行排序 while i < len(list1) and j < len(list2): # 比较当前索引大小 if list1[i] < list2[j]: res.append(list1[i]) i = i+1 else: res.append(list2[j]) j = j+1 # 如果序列一未完全放入结果序列中 if i < len(list1): res.append(list1[i]) i = i+1 # 如果序列二未完全放入结果序列中 if j < len(list2): res.append(list2[j]) j = j+1 return res # 主函数 temp1 = [] temp2 = [] # 循环获取输入 print("Please input numbers into the first list end with -1:") while True: a = eval(input()) if a == -1: break temp1.append(a) print("Please input numbers into the second list end with -1:") while True: a = eval(input()) if a == -1: break temp2.append(a) # 输出结果 print(merge_with_sort(temp1, temp2)) print(merge_without_sort(temp1, temp2))
使用sort进行排序的函数通过先将两列表合并后,再利用sort进行排序。不使用sort进行排序的函数则先定义两列表的初始索引,指向列表的第一个元素。比较两列表当前索引值,将较小值存入结果列表并将索引值加一。依次循环至任一列表为空。则将另一不为空列表全部按顺序放入结果列表并返回。
主函数中通过依次获得两个列表的输入完成两列表的输入,并分别调用两函数以输出结果。
(3)运行并测试
①运行程序后将提示依次输出两列表的值并以-1结尾
②完成输入后即输出两个相同的排序结果:
3. 子列表
编写函数 match_pattern(list1, list2),仅当 list2 是 list1 的子列表时返回 True。
例子:
list1 = [4, 10, 2, 3, 50, 100]
list2 = [3, 2, 50]
list3 = [2, 3, 50]
list4 = [2, 3, 40]
match_pattern(list1, list2) # return False
match_pattern(list1, list3) # return True
match_pattern(list1, list4) # return False
(1)基本思路
通过迭代器进行判断元素是否都在母列表中进行判断子列表。
(2)编程实现
# 判断函数 def match_pattern(list1, list2): # 通过迭代器进行子序列判断 it = iter(list1) return all(i in it for i in list2) # 主函数 temp1 = [] temp2 = [] # 循环获取输入 print("Please input numbers into the first list end with -1:") while True: a = eval(input()) if a == -1: break temp1.append(a) print("Please input numbers into the second list end with -1:") while True: a = eval(input()) if a == -1: break temp2.append(a) # 输出结果 print(temp1) print(temp2) print(match_pattern(temp1, temp2))
先创建对应迭代器,再通过迭代器依次判断是否迭代器的每个元素都在母列表中。
主函数中通过依次获得两个列表的输入完成两列表的输入,并分别调用函数以输出结果。
(3)运行并测试
①运行程序后将提示依次输出两列表的值并以-1结尾,接下来依次进行三组测试。
a.存在反序元素
b.满足子序列:
c.存在不在母列表的元素: