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. 学习Java第9天

    今天所作的工作: 反射,枚举类型与泛型 明天工作: 1.线程 2.网络通信 所遇到的问题及解决方法: 反射基本思想,泛型类似于类模板. 理解反射太难了,转悠了好半天,关键是理解反射的思想,才容易学.

  2. Vue3源码分析之微任务队列

    参考资料:https://zh.javascript.info/microtask-queue#wei-ren-wu-dui-lie-microtaskqueue 简化版 Vue3 中的 微任务队列实 ...

  3. git命令行-新建分支与已提交分支合并

    例如要将A分支的一个commit合并到B分支: 首先切换到A分支 git checkout A git log 找出要合并的commit ID : 例如 325d41 然后切换到B分支上 git ch ...

  4. [USACO18DEC]Balance Beam P

    根据题意不难发现这个模型是不好进行贪心的,于是可以考虑使用 \(dp\).可以令 \(dp_i\) 表示在 \(i\) 位置以最优策略能获得的报酬期望值,那么会有转移: \[dp_i = \max(f ...

  5. 基于redis实现tomcat的session会话保持 (转)

    出处:https://cloud.tencent.com/developer/article/1402997 基于redis实现tomcat的session会话保持 在实际生产中,我们经常部署应用服务 ...

  6. ARC快速入门

    1.ARC机制判断 iOS5以后,创建项目默认的都是ARC ARC机制下有几个明显的标志: 不允许调用对象的 release方法 不允许调用 autorelease方法 再重写父类的dealloc方法 ...

  7. notify()和wait()

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11398563.html notify() 和 wait() 主要是用来多个线程之间的协作. 它 ...

  8. 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

    作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...

  9. Spring中@Autowired 注解的注入规则

    默认根据类型,匹配不到则根据bean名字 1.声明一个service接口 public interface HelloService { void sayHello(); } 2.service接口的 ...

  10. Solution -「SPOJ-VCIRCLES」Area of Circles

    \(\mathcal{Description}\)   Link.   求平面上 \(n\) 个圆的并的面积.   \(n\le50\),可能被圆覆盖的横纵坐标区域在 \([-10^4,10^4]\) ...