Python 面试题:输入一个数组,输出该数组的第二大的数字
问题:
输入一个数组,输出该数组的第二大的数字,并且编写相关的测试用例
注意:
1.如果list含有非int, float元素需要remove
2.如果list有重复的最大元素,需要自己处理,内置的list.sort(reverse=True)
和heapq.nlargest
排序,元素个数不变。
附上代码
removeInvalidItems 去掉不是int或float类型的值。
注意:不能像下边这样用一次循环,因为remove某个元素,下标发生了改变,有些值并不能移除
for item in l: # remove non_value itemsif not isinstance(item, (int, float)):l.remove(item)
下边是可用代码,文件名为 findSecondUtil.py
def removeInvalidItems(l):tmpl = list()for item in l:if not isinstance(item, (int, float)):tmpl.append(item)for item in tmpl:l.remove(item)return l
findSecondItem.py 实现找到第二大数字的第一种方法。这种方法不用去掉重复元素。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import sys
from hyang.python3.interview.boyan.findSecondUtil import removeInvalidItems
#from findSecondUtil import removeInvalidItemsdef findSecond(l):l = removeInvalidItems(l)length = len(l)if length == 0:print("there is no number item in the list")return Noneelif length == 1:print("there is only one number item, it's ", l[0])return Noneelif length > sys.maxsize:print("out of scope")return Nonelargest, second = max(l), min(l)if largest == second:return Nonefor item in l:if item > second and item < largest:second = itemreturn second
findSecondTest.py 测试代码
import unittest
from hyang.python3.interview.boyan.findSecondItem import findSecond
#from findSecondItem import findSecondclass Test_findSecondItem(unittest.TestCase):# 如果跑所有用例,只运行一次前提条件和结束条件。则用setupclass()和teardownclass()@classmethoddef setUpClass(cls):print("在所有的测试用例执行之前,只执行一次============")@classmethoddef tearDownClass(cls):print("在所有的测试用例执行之后,只执行一次============")# empty listdef test_findSecondItem_01(self):l1 = list()assert (findSecond(l1) == None)# one item in listdef test_findSecondItem_02(self):l1 = [2]assert (findSecond(l1) == None)# No item in list after remove non-number itemsdef test_findSecondItem_03(self):l1 = [None, "abc", "xyz"]assert (findSecond(l1) == None)# one item in list after remove non-number itemsdef test_findSecondItem_04(self):l1 = [None, 3, "abc"]assert (findSecond(l1) == None)# duplated largest numberdef test_findSecondItem_05(self):l1 = [32, None, 12, "abc", 8, 6, 36, 3, 32, 4, 36, 9, 25, '35', 36]assert (findSecond(l1) == 32)# python3中写不写都会执行的
if __name__ == '__main__':unittest.main()
方法二:findSecondNum.py 从列表去掉所有的最大元素,再在列表中找一个最大就是第二大元素。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import sys
from hyang.python3.interview.boyan.findSecondUtil import removeInvalidItemsdef findSecond(l):l = removeInvalidItems(l)length = len(l)if length == 0:print("there is no number item in the list")return Noneelif length == 1:print("there is only one number item, it's ", l[0])return Noneelif length > sys.maxsize:print("out of scope")return Nonelargest=max(l)largest_count=l.count(largest)while largest_count>0: #remove all the largest iteml.remove(largest)largest_count-=1if len(l)==0:return Noneelse:return max(l)
方法三:利用内置的list.sort,但是要去掉重复元素
import sys
from hyang.python3.interview.boyan.findSecondUtil import removeInvalidItemsdef findSecond(l):removeInvalidItems(l)l2 = list(set(l)) # remove duplicated itemsl2.sort(reverse=True)length=len(l2)if length>=2:return l2[1]else:return None
方法四:与方法三类似,利用内置的heapq.nlargest,也需要去掉重复元素
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import sys, heapq
from hyang.python3.interview.boyan.findSecondUtil import removeInvalidItemsdef findSecond(l):removeInvalidItems(l)l2 = list(set(l)) # remove duplicated itemslength = len(l)length = len(l2)if length >= 2:return heapq.nlargest(2, l2)[1]else:return None
最后需要注意执行程序所在路径,见下图,可以结合自己的配置来调整。
Python 面试题:输入一个数组,输出该数组的第二大的数字相关推荐
- python面试题-输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母
题目: 输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母(k>=1) 输入要求: 第一行输入大小写组成的字符串 第二行输入k, k必须 ...
- 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出
问题: 从键盘中输入一个值,在数组中查找该值的索引并输出 代码: package learnjava;import java.util.Scanner;public class demo13 {pub ...
- 【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...
- 【java】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...
- Python输入一个字符串,输出其中每个字符的出现次数。要求使用标准库collotections中的Counter类...
一.题目: 1.输入一个字符串,输出其中每个字符的出现次数.要求使用标准库collotections中的Counter类. 2.输入一个字符串,输出其中只出现了一次的字符及其下标. 3.输入一个字符串 ...
- c语言输出整数n的所有素数因子,输入一个正整数 输出它的所有质数因子的c语言程序...
编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. #includevoidmain(){inti,z,x,y,j;printf("pleaseinput ...
- c语音学习-输入一个字母,输出其对应的ASCII码
输入一个字母,输出其对应的ASCII码 程序流程图: #include<stdio.h> void main() {char ch; prntf("输入一个字i母:\n" ...
- c语言中为什么有时候输入一个数字之后要再输入一个才输出结果
c语言中为什么有时候输入一个数字之后要再输入一个才输出结果? 我是一个c语言的初学者,刚学这个的时候就发现这个问题了,我就琢磨为啥,后面发现原来是printf里面\n写习惯了再scanf里面也写了\n ...
最新文章
- 计算机考试函数应用题及答案,计算机等级考试题库,二级C++试题及答案
- 【联邦学习】联盟学习到底是什么?他们画了部漫画……
- apache 编译安装php mysql_编译安装APACHE+PHP+MYSQL
- 【双十二】电商们的文案大战,猫狗快被玩坏了!
- spark rdd reduceByKey示例
- android blockcanary 原理,blockCanary原理
- R语言学习——处理数据对象的实用函数
- 基因表达聚类分析之初探SOM - 自组织特征图
- 取 GridView 里 点击当前行的 行数
- Spring容器,控制反转,依赖注入
- 怎么查看电脑有没有python_使用python获取电脑的磁盘信息方法
- matlab中k-means算法_机器学习 | KMeans聚类分析详解
- ANSI,UTF-8,Unicode,ASCII编码的区别
- java 本地文件路径怎么写_java本地文件路径怎么写
- android 录屏自动运行,Android录屏+视频转Gif实现
- ckplayer播放器 直播
- qemuuser模式运行linux,qemu两种上网方式
- 计算机运行瓶颈,我的电脑瓶颈在哪呢?
- Core ML and Vision
- 假装写在了开头qwq