问题:
输入一个数组,输出该数组的第二大的数字,并且编写相关的测试用例

注意:

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 面试题:输入一个数组,输出该数组的第二大的数字相关推荐

  1. python面试题-输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母

    题目: 输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母(k>=1) 输入要求: 第一行输入大小写组成的字符串 第二行输入k, k必须 ...

  2. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出

    问题: 从键盘中输入一个值,在数组中查找该值的索引并输出 代码: package learnjava;import java.util.Scanner;public class demo13 {pub ...

  3. 【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...

  4. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...

  5. 【java】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...

  6. Python输入一个字符串,输出其中每个字符的出现次数。要求使用标准库collotections中的Counter类...

    一.题目: 1.输入一个字符串,输出其中每个字符的出现次数.要求使用标准库collotections中的Counter类. 2.输入一个字符串,输出其中只出现了一次的字符及其下标. 3.输入一个字符串 ...

  7. c语言输出整数n的所有素数因子,输入一个正整数 输出它的所有质数因子的c语言程序...

    编程题:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. #includevoidmain(){inti,z,x,y,j;printf("pleaseinput ...

  8. c语音学习-输入一个字母,输出其对应的ASCII码

    输入一个字母,输出其对应的ASCII码 程序流程图: #include<stdio.h> void main() {char ch; prntf("输入一个字i母:\n" ...

  9. c语言中为什么有时候输入一个数字之后要再输入一个才输出结果

    c语言中为什么有时候输入一个数字之后要再输入一个才输出结果? 我是一个c语言的初学者,刚学这个的时候就发现这个问题了,我就琢磨为啥,后面发现原来是printf里面\n写习惯了再scanf里面也写了\n ...

最新文章

  1. 计算机考试函数应用题及答案,计算机等级考试题库,二级C++试题及答案
  2. 【联邦学习】联盟学习到底是什么?他们画了部漫画……
  3. apache 编译安装php mysql_编译安装APACHE+PHP+MYSQL
  4. 【双十二】电商们的文案大战,猫狗快被玩坏了!
  5. spark rdd reduceByKey示例
  6. android blockcanary 原理,blockCanary原理
  7. R语言学习——处理数据对象的实用函数
  8. 基因表达聚类分析之初探SOM - 自组织特征图
  9. 取 GridView 里 点击当前行的 行数
  10. Spring容器,控制反转,依赖注入
  11. 怎么查看电脑有没有python_使用python获取电脑的磁盘信息方法
  12. matlab中k-means算法_机器学习 | KMeans聚类分析详解
  13. ANSI,UTF-8,Unicode,ASCII编码的区别
  14. java 本地文件路径怎么写_java本地文件路径怎么写
  15. android 录屏自动运行,Android录屏+视频转Gif实现
  16. ckplayer播放器 直播
  17. qemuuser模式运行linux,qemu两种上网方式
  18. 计算机运行瓶颈,我的电脑瓶颈在哪呢?
  19. Core ML and Vision
  20. 假装写在了开头qwq

热门文章

  1. 基于koa2开发的用户中心
  2. docker 安装redis第三方集群方案 codis
  3. jstl自定义标签接口介绍
  4. Samrty技术的 初步了解
  5. 各种排序算法及其java程序实现
  6. qtp web随机获取下拉框的值
  7. Hibernate查询视图返回null问题说明及解决办法
  8. 【FI学习笔记】客户发票收款清账
  9. 【MM配置】Global Data 全局数据相关配置
  10. LSMW批处理使用方法(07)_步骤6、7