1、列表练习题
完成下列列表相关的编程题,先运行下列的test函数,在完成每道题之后,都可以通过调用test函数检测所写函数对错。
def test(got, expected): if got == expected: prefix = '正确!' else: prefix = '错误!' print('%s 你的结果: %s 应该返回的结果: %s' % (prefix, repr(got), repr(expected)))
习题1
输入一个字符串列表,返回同时满足以下两个条件的字符串的个数:
- 1.字符串长度大等于2
- 2.字符串的第一个字符等于最后一个字符
注意:python语言中没有 ++ 操作符,但是有 += 操作符。
# 可运行代码自测 test(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']), 3) test(match_ends(['', 'x', 'xy', 'xyx', 'xx']), 2) test(match_ends(['aaa', 'be', 'abc', 'hello']), 1)
正确! 你的结果: 3 应该返回的结果: 3 正确! 你的结果: 2 应该返回的结果: 2 正确! 你的结果: 1 应该返回的结果: 1
习题2
输入一个字符串列表,返回满足以下条件的字符串列表:
- 1.按字母顺序从小到大排序
- 2.第一个字母是'x'的字符串排列在最前面
例如:输入 ['mix', 'xyz', 'apple', 'xanadu', 'aardvark'] ,应该返回 ['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
提示:可以通过生成两个列表并对它们分别进行排序,然后再把它们连接起来。
def front_x(words): # +++your code here+++ # 创建两个列表,list1用于存首字母是x的,list2存其他 list1 = [] list2 = [] # 取出字符串列表中的每个字符串 for s in words: # print(s) # 首字母是x if s[0] == 'x': list1.append(s) # 其他 else: list2.append(s) # print(list1) # print(list2) # 对两个列表分别排序 list1 = sorted(list1) list2 = sorted(list2) # 将两个列表拼接 list1.extend(list2) return list1
# 可运行代码自测 test(front_x(['bbb', 'ccc', 'axx', 'xzz', 'xaa']), ['xaa', 'xzz', 'axx', 'bbb', 'ccc']) test(front_x(['ccc', 'bbb', 'aaa', 'xcc', 'xaa']), ['xaa', 'xcc', 'aaa', 'bbb', 'ccc']) test(front_x(['mix', 'xyz', 'apple', 'xanadu', 'aardvark']), ['xanadu', 'xyz', 'aardvark', 'apple', 'mix'])
正确! 你的结果: ['xaa', 'xzz', 'axx', 'bbb', 'ccc'] 应该返回的结果: ['xaa', 'xzz', 'axx', 'bbb', 'ccc'] 正确! 你的结果: ['xaa', 'xcc', 'aaa', 'bbb', 'ccc'] 应该返回的结果: ['xaa', 'xcc', 'aaa', 'bbb', 'ccc'] 正确! 你的结果: ['xanadu', 'xyz', 'aardvark', 'apple', 'mix'] 应该返回的结果: ['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
习题3
输入一个非空的元组列表,返回按列表中元组的最后一个元素从小到大排序后的元组列表
例如:输入:[(1, 7), (1, 3), (3, 4, 5), (2, 2)],应该返回:[(2, 2), (1, 3), (3, 4, 5), (1, 7)]
提示:使用自定义键=函数从每个元组提取最后一个元素
def sort_last(tuples): # +++your code here+++ print("最开始的我是这样的:", tuples) # 创建一个字典用于保存数据 dict_ = {} # 创建一个列表用于保存最终排序结果 list_end = [] # 得到列表中元组的最后一个元素 for i in tuples: dict_[i[-1]] = i print("得到的字典长啥样: ", dict_) # 得到字典中的keys的列表 list_keys = dict_.keys() print("得到的列表长啥样: ", list_keys) # 根据字典中的keys进行排序 list_keys = sorted(list_keys) print("将keys列表排序后: ", list_keys) # 依次取出keys for i in list_keys: # 利用键值对,将排序好的keys对应的values,依次装入新的列表 list_end.append(dict_[i]) print("最终的我是这样的: ", list_end) return list_end
# 可运行代码自测 test(sort_last([(1, 3), (3, 2), (2, 1)]), [(2, 1), (3, 2), (1, 3)])
最开始的我是这样的: [(1, 3), (3, 2), (2, 1)] 得到的字典长啥样: {3: (1, 3), 2: (3, 2), 1: (2, 1)} 得到的列表长啥样: dict_keys([3, 2, 1]) 将keys列表排序后: [1, 2, 3] 最终的我是这样的: [(2, 1), (3, 2), (1, 3)] 正确! 你的结果: [(2, 1), (3, 2), (1, 3)] 应该返回的结果: [(2, 1), (3, 2), (1, 3)]
习题4
输入一个数字列表,将所有相邻且相同的元素去重保留一个元素后返回
例如:输入[1, 2, 2, 3] 返回 [1, 2, 3];输入[1, 1, 2, 2, 3, 3, 3] 返回 [1, 2, 3]
def remove_adjacent(ll): # +++your code here+++ # 逆序,这样就不会出现下标溢出的情况 for i in range(len(ll) - 1, 0, -1): # print("现在都到了第%d步" % i) # print(ll) if ll[i] == ll[i-1]: # 删除相邻且重复的元素 del ll[i] return ll
# 可运行代码自测 test(remove_adjacent([1, 2, 2, 3]), [1, 2, 3]) test(remove_adjacent([2, 2, 3, 3, 3]), [2, 3]) test(remove_adjacent([]), [])
正确! 你的结果: [1, 2, 3] 应该返回的结果: [1, 2, 3] 正确! 你的结果: [2, 3] 应该返回的结果: [2, 3] 正确! 你的结果: [] 应该返回的结果: []
习题5
给定两个按递增顺序排序的列表,创建并返回一个合并的按排序排列的所有元素的列表。
例如输入 ['aa', 'xx', 'zz'], ['bb', 'cc'],应该返回['aa', 'bb', 'cc', 'xx', 'zz']
希望你提供的解决方案在“线性”时间内工作,使两个列表都可以一次完成。
def linear_merge(list1, list2): # +++your code here+++ result = [] while len(list1) and len(list2): # 对两个列表首字符串元素比较大小 if list1[0] < list2[0]: # result添加该元素,并且在原列表中删除该元素 result.append(list1.pop(0)) else: result.append(list2.pop(0)) # 循环结束后,因为两个列表的长度可能不同,会存在冗余 result.extend(list1) result.extend(list2) return result
# 可运行代码自测 test(linear_merge(['aa', 'xx', 'zz'], ['bb', 'cc']),['aa', 'bb', 'cc', 'xx', 'zz']) test(linear_merge(['aa', 'xx'], ['bb', 'cc', 'zz']),['aa', 'bb', 'cc', 'xx', 'zz']) test(linear_merge(['aa', 'aa'], ['aa', 'bb', 'bb']),['aa', 'aa', 'aa', 'bb', 'bb'])
正确! 你的结果: ['aa', 'bb', 'cc', 'xx', 'zz'] 应该返回的结果: ['aa', 'bb', 'cc', 'xx', 'zz'] 正确! 你的结果: ['aa', 'bb', 'cc', 'xx', 'zz'] 应该返回的结果: ['aa', 'bb', 'cc', 'xx', 'zz'] 正确! 你的结果: ['aa', 'aa', 'aa', 'bb', 'bb'] 应该返回的结果: ['aa', 'aa', 'aa', 'bb', 'bb']