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']


python面试_总结03_列表练习题的更多相关文章

  1. python面试_总结04_字符串练习题

    完成下列列表相关的编程题,先运行下列的test函数,在完成每道题之后,都可以通过调用test函数检测所写函数对错 def test(got, expected): if got == expected ...

  2. python面试_总结02_代码题

    - 代码题 1.创建一个函数,接收一个字符串参数,判断其做为Python标识符是否合法. 具体要求: 如果合法则输出 True,否则输出 False. 如果该字符串与Python内置的关键字,或Bif ...

  3. python面试_总结01_概念和内置高阶函数

    - 简答题 1.请谈谈Python中is 和 == 的区别(代码演示) is用于比较两个变量是否引用了同一个内存地址,is表示的是对象标识符(object identity),作用是用来检查对象的标识 ...

  4. Python内建的对象列表

    Python内建的对象列表 刚写Python肯定会遇到这样的情况,想写些什么,但又不知从何写起... 在我看来问题在于我们不知道有什么东东可以拿来玩,这里列出Python的内建对象,稍微归类了一下,多 ...

  5. python开发_++i,i += 1的区分

    python开发_++i,i += 1的区分 在很多编程语言(C/C++,Java等)中我们都会碰到这样的语法: 1 int i = 0; 2 ++ i; // -- i; 这样的语法在上述编程语言中 ...

  6. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  7. python练习_购物车(简版)

    python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下 ...

  8. Python面试真题答案或案例

    Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...

  9. Python递归_打印节点信息

    Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...

随机推荐

  1. HashMap相关

    final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] ta ...

  2. Webpack之 webpack-dev-server 中的 contentBase配置及作用

    contentBase:主要是指定静态资源的根目录的.  

  3. CF1581

    其实是手速场,但因为 \(\rm D, E\) 数据范围时限太阴间卡住了. D \(\rm Hint:\) 本题常数极小加适当剪枝可以 \(\mathcal{O}(n ^ 5)\) 过 \(100\) ...

  4. Thread的打断

    常用方法 public void interrupt() t.interrupt() 打断t线程(设置t线程某给标志位f=true,并不是打断线程的运行),不能打断正在竞争锁的线程. public b ...

  5. Block内存管理

    block是不是一个对象?是一个对象 如何判断当前文件是MRC,还是ARC 1.dealloc 能否调用super,只有MRC才能调用super 2.能否使用retain,release.如果能用就是 ...

  6. java基础之设计模式之单例模式

    关于单例模式: 单例,即单一实例.因为在一些情况下,某些类的对象,我们只需要一个就可以了,所以我们要用到单例模式. 单例模式的目的是使得一个类中的一个静态对象成为系统中的唯一实例,提供一个访问该实例的 ...

  7. kebernet--新手填坑

    1.安装好kubernet之后,新建rc后,里面的容器一直ImagePullBackOff ,镜像无法拉取: ----需要配置docker镜像为国内镜像,记得在各个Node上都要配置!!! vim / ...

  8. jdk1.5新特性之------->可变参数

    /* jdk1.5新特性之------->可变参数 需求: 定义一个函数做加法功能(函数做几个数据 的加法功能是不确定). 可变参数的格式: 数据类型... 变量名 可变参数要 注意的细节: 1 ...

  9. jquery-easyui环境的搭建及测试

    对于软件开发者来说,一个良好的前端框架不仅能够使页面优美可观而且还能够大大的提高开发效率.提高系统整体界面的美观,框架将常用的功能封装完成,减少工作量.前端框架目前也比较多,小编本次主要介绍下easy ...

  10. 使用代码绑定 DataGridView 控件用于程序界面显示表格

    需求 软件界面需要使用表格,对数据进行显示.交互,这是一个非常通用的需求. 实现方法 DataGridView介绍 参考 https://docs.microsoft.com/en-us/dotnet ...